1. ホーム
  2. c++

[解決済み] C++でIncomplete Typeエラーが発生するのはどのような場合か

2022-03-02 02:08:19

質問内容

c++コンパイラが"incomplete type error"を投げるのはどんなときか、どなたか教えてください。

注:この質問は、私自身が自分のコードをデバッグできるように、意図的に少しオープンエンドにしています。

どのように解決するのですか?

これは通常、コンパイラが前方宣言を見たが、その型の完全な定義がない場合、その型がどこかで使用されているときに起こります。たとえば、以下のような場合です。

class A;

class B { A a; };

2行目はコンパイラのエラーになり、コンパイラによっては不完全な型が報告されます(他のコンパイラは別のエラーを出しますが、意味は同じです)。

しかし、このような前方宣言へのポインタを使用する場合は、クラスへのポインタのサイズは常に既知であるため、文句を言われることはないでしょう。このように

class A;
class B {
   A *a;
   std::shared_ptr<A> aPtr;
};

具体的なアプリケーションやライブラリでこのエラーが発生した場合、何が問題なのかというと、通常、前方宣言を含むヘッダが含まれているが、完全な定義がまだ見つかっていない場合に発生するのです。解決策は非常に明白で、完全な型にアクセスできるヘッダをインクルードすることです。時には、単に型に使用されている名前空間がないか、間違っていることもあり、それを修正する必要があります。