この場合で多重定義ってできますか

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Artery

この場合で多重定義ってできますか

#1

投稿記事 by Artery » 10年前

当たり判定クラスを作って自機と敵の弾、敵と自機の弾…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関数をオーバーロードしているのですが、
うまくいきません
どうすればいいのでしょうか

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: この場合で多重定義ってできますか

#2

投稿記事 by みけCAT » 10年前

とりあえずコンパイルを通し、インデントを整えてみました。

コード:

// -------------------- クラスの中身はわからないので、辻褄が合うように適当に。
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関数をオーバーロードしているのですが、
うまくいきません
どうすればいいのでしょうか
まずは何がどううまくいかないのかを説明するといいと思います。
敵、自機クラスのソースコードも貼っていただけるとわかりやすくなるかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

artery

Re: この場合で多重定義ってできますか

#3

投稿記事 by artery » 10年前

GameObjectクラス内のattacked関数を継承したクラス毎に処理を変えたかったのですが、
virtualで仮想関数にしたらうまくいきました
ありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る