ページ 1 / 1
この場合で多重定義ってできますか
Posted: 2014年11月11日(火) 21:42
by Artery
当たり判定クラスを作って自機と敵の弾、敵と自機の弾…etcのような処理を作りたいです
コード:
#include "GameObject.h"
class HitEvent{
public:
HitEvent(){};
HitEvent(GameObject* adress11,GameObject* adress12){
adress1=adress11;adress2=adress12;}
Int adress1;
Int adress2;
Int hitcheck();//当たり判定の関数
int hit();//当たったらどうするか
}
Int HitEvent::hit(){
if (hitcheck((*adress1).getx(),(*adress2).gety()/*省略*/))==TRUE){
(*adress1).attacked((*adress2).getdamage());
//adress2も同じ処理
return 1;
}
return 0;
}
ここで、adress1やadress2には敵や自機クラスのインスタンスが入ります
敵、自機クラスはGameObjectクラスを継承してattacked関数をオーバーロードしているのですが、
うまくいきません
どうすればいいのでしょうか
Re: この場合で多重定義ってできますか
Posted: 2014年11月11日(火) 22:07
by みけCAT
とりあえずコンパイルを通し、インデントを整えてみました。
コード:
// -------------------- クラスの中身はわからないので、辻褄が合うように適当に。
struct GameObject {
int data;
};
struct Int {
int deeta;
Int(){}
Int(int d):deeta(d){}
Int& operator=(GameObject* g){deeta=g->data;return *this;}
Int& operator*(){return *this;}
int getx()const{return deeta;}
int gety()const{return deeta;}
void attacked(int a){deeta-=a;}
int getdamage()const{return deeta;}
};
const int TRUE = 1;
// -------------------- こちらにこのヘッダは無いのでコメントアウト
//#include "GameObject.h"
class HitEvent{
public:
HitEvent(){};
HitEvent(GameObject* adress11,GameObject* adress12){
adress1=adress11;adress2=adress12;}
Int adress1;
Int adress2;
Int hitcheck();//当たり判定の関数
// -------------------- 使用されているのに用意されていないので適当に追加
int hitcheck(int x,int y)const{return x==y?TRUE:TRUE-1;}
// -------------------- 宣言があるのに実体が無いので削除(引数の型から判別できないのでオーバーロードできない?)
//int hit();//当たったらどうするか
Int hit(); // -------------------- 実体があるのに宣言が無いので追加
}; // -------------------- セミコロンを追加
Int HitEvent::hit(){
// -------------------- 余計なカッコがある
//if (hitcheck((*adress1).getx(),(*adress2).gety()/*省略*/))==TRUE){
if (hitcheck((*adress1).getx(),(*adress2).gety()/*省略*/)==TRUE){
(*adress1).attacked((*adress2).getdamage());
//adress2も同じ処理
return 1;
}
return 0;
}
// -------------------- コンパイルだけでなくリンクもできるようにするためのダミー
int main(void){return 0;}
Artery さんが書きました:敵、自機クラスはGameObjectクラスを継承してattacked関数をオーバーロードしているのですが、
うまくいきません
どうすればいいのでしょうか
まずは何がどううまくいかないのかを説明するといいと思います。
敵、自機クラスのソースコードも貼っていただけるとわかりやすくなるかもしれません。
Re: この場合で多重定義ってできますか
Posted: 2014年11月12日(水) 18:15
by artery
GameObjectクラス内のattacked関数を継承したクラス毎に処理を変えたかったのですが、
virtualで仮想関数にしたらうまくいきました
ありがとうございました