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

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

DDD
DDDオリジナル
2024-12-04 12:34:10669ブラウズ

Why Does My C   Code Produce

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

「typeinfo への未定義の参照」リンカー エラーが発生した場合は、エラーを詳しく調べることが重要です。これらのメッセージの背後にある根本的な理由。考えられる原因の 1 つは、定義を提供せずに仮想関数を宣言していることにあります。

仮想関数ではポリモーフィズムが可能であり、派生クラスが基本クラスから継承したメソッドをオーバーライドしてさまざまな実装を提供できるようになります。ただし、仮想関数が定義なしで宣言された場合、コンパイラは実装が別の場所に提供されることを示します。これは、リンカーが他のコンパイル ユニットまたはライブラリを参照しながら、リンク段階で欠落している定義を見つけようとすることを意味します。

このエラーを解消するには、仮想関数に定義を付ける必要があります。これにより、関数宣言がその実装に関連付けられ、リンカーが後で参照を解決しようとすることが防止されます。定義された仮想関数は次のようになります。

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

対照的に、定義のない仮想関数宣言は次のようになります。

virtual void fn();

この宣言は定義を提供できないため、「未定義」になります。 typeinfo への参照」エラー。

同様に、定義せずに外部変数を宣言することに相当します。 it:

extern int i;
int *pi = &i;

この例では、コンパイラーは、「i」整数が別の場所で宣言されており、リンク中に解決する必要があることを示します。そうしないと、pi はそのアドレスを参照できません。

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

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