0

異なるヘッダーに 2 つのクラスがある場合:

最初のヘッダー:

include "second_header.h"
class A
{
   int x;

};

そして2番目:

include "first_header.h"
class A;
class B
{
   A a;
};

コンパイラが undefined class のエラーを表示するのはなぜですか? 説明してもらえますか?

4

3 に答える 3

4

second_header.hクラスでAは実際には定義されていないため、宣言されているだけです。また、クラスの非参照/非ポインターを使用するには、完全に定義する必要があります。

second_header.hのファイルは必要ないので、first_header.hそのインクルードをファイルから削除するだけfirst_header.hです。

于 2013-09-12T13:48:21.600 に答える
3

ヘッダーを再帰的に含めるようコンパイラーに要求しています。最初のヘッダーに 2 番目のヘッダーを含める必要はありません。そのインクルードを削除してみてください。

ちなみに、原則として、C++ ヘッダーには常にインクルード ガードを使用する必要があります。

于 2013-09-12T13:49:00.143 に答える
1

クラス 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.
};
于 2013-09-12T13:54:03.833 に答える