クラス型の配列のコンストラクタ宣言について
Posted: 2015年1月03日(土) 22:47
C++でのクラス型配列の初期化において
Shot shot[60];
for(i=0;i<60;i++){
shot=new Shot();
}
みたいにしたいのですが、できないです。
ネットで調べるとポインタでできるそうなのですが
Shot* shotP;
shotP=shot;
ってポインタ代入しようとするとエラーになって困ってます。
プログラムの64,65行目でクラスの宣言だけをして、78行目のfor文であらかじめ作っておいたコンストラクタで初期化するようにしたいです…
Shot shot[60];
for(i=0;i<60;i++){
shot=new Shot();
}
みたいにしたいのですが、できないです。
ネットで調べるとポインタでできるそうなのですが
Shot* shotP;
shotP=shot;
ってポインタ代入しようとするとエラーになって困ってます。
#include"ShotP.h";
#include"key.h";
#include "../include/DxLib.h";
#include "math.h";
#include "value.h";
#include "field.h";
int shotPImg;
#define SHOT_P_MAX 60 //画面上に表示できる弾の最大数
//クラス内
//コンストラクタ
ShotP::ShotP():Object(){
//Object()で初期化する。
}
//関数
void ShotP::move(){
//設定したパラメータを基に移動の基本型
//主に本体からまっすぐ直線に(エナの場合)飛ぶ弾
//敵弾と基本動作は同じだからObjectクラスでまとめるかも
this->x=GetGapX(this->x,this->v,this->angle);
this->y=GetGapY(this->y,this->v,this->angle);
}
void ShotP::graph(){
//描画処理
//自機を自機座標を中心に描画
DrawRotaGraphF(this->x,this->y,1.0f,0.0f,shotPImg,TRUE);
}
void ShotP::setParameter(double x,double y,double v,double angle){
this->flag=1;
this->x=x;
this->y=y;
this->v=v;
this->angle=angle;
}
void ShotP::main(){
move();
graph();
}
//弾の情報取得(あたり判定とかで使う)
double ShotP::getX(){
return x;
}
double ShotP::getY(){
return y;
}
double ShotP::getV(){
return v;
}
double ShotP::getAngle(){
return angle;
}
int ShotP::getFlag(){
return flag;
}
//クラス内ここまで
ShotP shotP[SHOT_P_MAX];
ShotP *shot;
//クラス外
void shotPinitialize(){
//初期化するだけ
//画像呼び出し
shotPImg=LoadGraph("../dat/img/char/bl_00.png");
}
//弾全体を動かす関数
//Main().cppのWeillループの中で常に動いてる子
void shotPset(double x,double y,double v,double angle){
for(int i=0;i<SHOT_P_MAX;i++){
//弾の最大数まで回してフラグ立ってるやつだけ動作させる
if(shotP[i].getFlag()==1){
shotP[i].setParameter(x,y,v,angle);
break;
}
}
}
void shotPmain(){
DrawFormatString(50,150,GetColor(255, 255, 255),"shot[0]:x=%f",shotP[0].getX());
DrawFormatString(50,170,GetColor(255, 255, 255),"shot[0]:y=%f",shotP[0].getY());
for(int i=0;i<SHOT_P_MAX;i++){
//弾の最大数まで回してフラグ立ってるやつだけ動作させる
if(shotP[i].getFlag()==1){
shotP[i].main();
}
}
}