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

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

Linda Hamilton
リリース: 2024-12-10 16:57:18
オリジナル
594 人が閲覧しました

Why Am I Getting an

Typeinfo への未定義の参照: 原因と解決策

恐ろしい「typeinfo への未定義の参照」エラーは、C 開発者を悩ませ、困惑させる可能性があります。その起源。このエラーは、リンカーが対応する定義のない仮想関数宣言に遭遇した場合に、舞台裏で発生します。

仮想関数は、派生クラスでオーバーライドされるように設計されており、ポリモーフィックな動作が可能です。ただし、仮想関数を定義せずに宣言すると、定義が別の場所にあることを意味します。これにより、リンカーは外部のコンパイル ユニットまたはライブラリで欠落している定義を検索するようになります。リンカーがそれを見つけることができない場合、「typeinfo への未定義の参照」エラーが表示されます。

次の宣言を検討してください:

1

virtual void fn();

ログイン後にコピー

この宣言は、fn() が仮想関数であることをコンパイラーに通知します。ただし、その実装は提供されていません。リンカーはリンク段階でこれを未解決のシンボルとしてフラグを立て、エラーが発生します。

これを修正するには、仮想関数の定義を提供する必要があります。

1

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

ログイン後にコピー

宣言に定義を追加すると、リンカは欠落しているシンボルを検索する必要がなくなります。

このエラーは次のコードに似ています。スニペット:

1

2

extern int i;

int *pi = &i;

ログイン後にコピー

この場合、i は別のコンパイル単位にある外部変数として宣言されます。これには、リンカーが外部参照を解決する必要がありますが、i が見つからない場合は、未解決のシンボル エラーが報告されます。

「typeinfo への未定義の参照」エラーの根本的な原因を理解することで、開発者は迅速にトラブルシューティングを行うことができます。そして、仮想関数の適切な定義を提供するか、外部シンボル参照を適切に処理することで問題を解決します。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート