g++ 未定義の typeinfo 参照 質問する

g++ 未定義の typeinfo 参照 質問する

次のエラーが発生しました:

(.gnu.linkonce.[stuff]): [メソッド]への未定義の参照 [オブジェクト ファイル]:(.gnu.linkonce.[stuff]): `[クラス名]のtypeinfo'への未定義の参照

なぜこのような「typeinfo への未定義の参照」リンカー エラーが発生するのでしょうか?
背後で何が起こっているのか説明できる人はいますか?

ベストアンサー1

考えられる理由の 1 つは、仮想関数を定義せずに宣言していることです。

同じコンパイル ユニット内で定義せずに宣言すると、別の場所で定義されていることを示します。つまり、リンカー フェーズでは、他のコンパイル ユニット (またはライブラリ) のいずれかでそれを見つけようとします。

仮想関数を定義する例は次のとおりです。

virtual void fn() { /* insert code here */ }

この場合、宣言に定義を添付しているので、リンカーは後で定義を解決する必要がありません。

この線

virtual void fn();

定義せずに宣言するfn()と、ご質問のエラー メッセージが表示されます。

次のコードと非常によく似ています:

extern int i;
int *pi = &i;

これは、整数がi別のコンパイル単位で宣言されており、リンク時に解決する必要があることを示しています (そうでない場合は、piそのアドレスに設定できません)。

おすすめ記事