異なるヘッダーに 2 つのクラスがある場合:
最初のヘッダー:
include "second_header.h"
class A
{
int x;
};
そして2番目:
include "first_header.h"
class A;
class B
{
A a;
};
コンパイラが undefined class のエラーを表示するのはなぜですか? 説明してもらえますか?
異なるヘッダーに 2 つのクラスがある場合:
最初のヘッダー:
include "second_header.h"
class A
{
int x;
};
そして2番目:
include "first_header.h"
class A;
class B
{
A a;
};
コンパイラが undefined class のエラーを表示するのはなぜですか? 説明してもらえますか?
second_header.h
クラスでA
は実際には定義されていないため、宣言されているだけです。また、クラスの非参照/非ポインターを使用するには、完全に定義する必要があります。
second_header.h
のファイルは必要ないので、first_header.h
そのインクルードをファイルから削除するだけfirst_header.h
です。
ヘッダーを再帰的に含めるようコンパイラーに要求しています。最初のヘッダーに 2 番目のヘッダーを含める必要はありません。そのインクルードを削除してみてください。
ちなみに、原則として、C++ ヘッダーには常にインクルード ガードを使用する必要があります。
クラス A のオブジェクトを実際に使用する場合、 A の前方宣言は使用できませんclass A;
。2 番目のヘッダーから行を削除するか
、クラス B でポインターを使用できます。
class A; // forward declaration, no need to include A's header.
class B
{
A* a; // don't create an A object (compiler would need A's header) but an A pointer.
};