[解決済み] 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;
};
具体的なアプリケーションやライブラリでこのエラーが発生した場合、何が問題なのかというと、通常、前方宣言を含むヘッダが含まれているが、完全な定義がまだ見つかっていない場合に発生するのです。解決策は非常に明白で、完全な型にアクセスできるヘッダをインクルードすることです。時には、単に型に使用されている名前空間がないか、間違っていることもあり、それを修正する必要があります。
関連
-
[解決済み】coutはstdのメンバではない
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] template "と "typename "キーワードはどこに、なぜ入れなければならないのですか?
-
[解決済み] 8192個の要素にループをかけると、プログラムが遅くなるのはなぜですか?
-
[解決済み] int argc, char *argv[] とはどういう意味ですか?
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された