C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

エラーになる原因がわからなくて困っています。 /ああつ (20/02/08(Sat) 15:05) #93831
Re[1]: エラーになる原因がわからなくて困っています。 /ああつ (20/02/08(Sat) 22:22) #93832
  └ Re[2]: エラーになる原因がわからなくて困っています。 /774RR (20/02/12(Wed) 09:49) #93851


親記事 / ▼[ 93832 ]
■93831 / 親階層)  エラーになる原因がわからなくて困っています。
□投稿者/ ああつ (1回)-(2020/02/08(Sat) 15:05:46)

分類:[C/C++] 

初めて投稿します。なにか失礼があるかもしれませんがご容赦ください。c++初心者です。bituseというサイトを参考にして、ゲームを作っていたのですが、以下の操作をするとエラーになってしまいます。その原因がわからなくて困っています。簡略化しています。このコードでもエラーになります。OSはwindows 10、コンパイラはvisual studio 2019です。controlが定義されていない識別子です、と表示されます。さらにファイルが開けません、とエラーになります。自分の知識や理解が及んでいないのは重々承知なのですが、ご教示いただけると幸いです。
以下がcontrolヘッダー、enemyヘッダー、main.cppです。

controlヘッダー
#include <iostream>
#include "enemy.h"
using namespace std;

class control {
private:
	enemy* Enemy;
public:
	static control& getinstance() {
		static control Control;
		return Control;
	}
	void c_all();
	control();
};

void control::c_all() {
	cout << "c_all" << endl;
	Enemy->e_all();
}

control::control() {
	Enemy = new enemy;
}

enemyヘッダー
#include <iostream>
#include "control.h"
using namespace std;

class enemy {
private:
	int c;
public:
	void e_all();
};

void enemy::e_all() {
	cout << "c_all" << endl;

	control& e_Control = control::getinstance();
}

nain.cppです。
#include "control.h"

int main() {
	control* con = new control;

	con->c_all();

	return 0;
}

[ □ Tree ] 返信 編集キー/

▲[ 93831 ] / ▼[ 93851 ]
■93832 / 1階層)  Re[1]: エラーになる原因がわからなくて困っています。
□投稿者/ ああつ (2回)-(2020/02/08(Sat) 22:22:42)
No93831 (ああつ さん) に返信
> 初めて投稿します。なにか失礼があるかもしれませんがご容赦ください。c++初心者です。bituseというサイトを参考にして、ゲームを作っていたのですが、以下の操作をするとエラーになってしまいます。その原因がわからなくて困っています。簡略化しています。このコードでもエラーになります。OSはwindows 10、コンパイラはvisual studio 2019です。controlが定義されていない識別子です、と表示されます。さらにファイルが開けません、とエラーになります。自分の知識や理解が及んでいないのは重々承知なのですが、ご教示いただけると幸いです。
> 以下がcontrolヘッダー、enemyヘッダー、main.cppです。
> 
> controlヘッダー
> #include <iostream>
> #include "enemy.h"
> using namespace std;
> 
> class control {
> private:
> 	enemy* Enemy;
> public:
> 	static control& getinstance() {
> 		static control Control;
> 		return Control;
> 	}
> 	void c_all();
> 	control();
> };
> 
> void control::c_all() {
> 	cout << "c_all" << endl;
> 	Enemy->e_all();
> }
> 
> control::control() {
> 	Enemy = new enemy;
> }
> 
> enemyヘッダー
> #include <iostream>
> #include "control.h"
> using namespace std;
> 
> class enemy {
> private:
> 	int c;
> public:
> 	void e_all();
> };
> 
> void enemy::e_all() {
> 	cout << "c_all" << endl;
> 
> 	control& e_Control = control::getinstance(); ここでエラーになります。
> }
> 
> nain.cppです。
> #include "control.h"
> 
> int main() {
> 	control* con = new control;
> 
> 	con->c_all();
> 
> 	return 0;
> }

[ 親 93831 / □ Tree ] 返信 編集キー/

▲[ 93832 ] / 返信無し
■93851 / 2階層)  Re[2]: エラーになる原因がわからなくて困っています。
□投稿者/ 774RR (776回)-(2020/02/12(Wed) 09:49:58)
control.h と enemy.h が相互依存しているからっす。
control.h は #include "enemy.h" 済みでないとうまく動かない構造で、
enemy.h は #include "control.h" 済みでないとうまく動かない構造で、
当然両方を同時に満たすことはできないのでエラーになるわけっす。

で、このソースコードは今どき流ではない書き方なんだけど、そのサイトではこんなコード推奨してるの?
分割コンパイルの例題として enemy.h enemy.cpp control.h control.cpp のようにファイル分けてない?
んでもって .h と .cpp の分割方針とか相互依存の解決方法とか解説してない?

[ 親 93831 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -