ホームページ >バックエンド開発 >C++ >g で「typeinfo への未定義の参照」エラーが発生するのはなぜですか?

g で「typeinfo への未定義の参照」エラーが発生するのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-03 06:18:10244ブラウズ

Why Does g   Produce

G : 「Typeinfo への未定義の参照」エラーについて

「typeinfo への未定義の参照」エラーは、C プログラムをコンパイルするときによく発生します。 g 。これは、リンカが特定のクラスの型情報を見つけられないことを示します。これにはいくつかの原因が考えられます。

原因: 定義なしの仮想関数の宣言

一般的な理由の 1 つは、このエラーは、同じコンパイル単位で定義を提供せずに仮想関数を宣言していることです。仮想関数を定義せずに宣言すると、その定義が後続のコンパイル単位または外部ライブラリのいずれかに存在することを示唆することになります。

したがって、リンク段階でコンパイラは、他の場所で仮想関数の定義を検索します。オブジェクト ファイルまたはライブラリ。定義を見つけられない場合は、「typeinfo への未定義の参照」エラーが発生します。

例: 間違った宣言

virtual void fn();

この宣言は、コンパイラに次のことを通知します。 fn() という名前の仮想関数は存在しますが、具体的な関数は提供されません。

例: 正しい定義

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

仮想関数に定義を提供すると、リンカーはそれを別の場所で検索する必要がなくなり、エラー。

類似: 外部変数解決策

この動作は、あるコンパイル単位で外部変数を宣言し、明示的な定義を指定せずに別のコンパイル単位でその変数にアクセスしようとするのと似ています。

extern int i;
int *pi = &i;

ここで、変数はi は外部で宣言され、その定義が別のコンパイル単位にあることを示します。この定義がリンク時に使用できない場合、コンパイラは「未定義の参照」エラーを生成します。

このエラーを回避し、C コードを正常にコンパイルするには、このエラーの根本原因を理解することが重要です。

以上がg で「typeinfo への未定義の参照」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。