Typeinfo への未定義の参照: 原因と解決策
恐ろしい「typeinfo への未定義の参照」エラーは、C 開発者を悩ませ、困惑させる可能性があります。その起源。このエラーは、リンカーが対応する定義のない仮想関数宣言に遭遇した場合に、舞台裏で発生します。
仮想関数は、派生クラスでオーバーライドされるように設計されており、ポリモーフィックな動作が可能です。ただし、仮想関数を定義せずに宣言すると、定義が別の場所にあることを意味します。これにより、リンカーは外部のコンパイル ユニットまたはライブラリで欠落している定義を検索するようになります。リンカーがそれを見つけることができない場合、「typeinfo への未定義の参照」エラーが表示されます。
次の宣言を検討してください:
1 |
|
この宣言は、fn() が仮想関数であることをコンパイラーに通知します。ただし、その実装は提供されていません。リンカーはリンク段階でこれを未解決のシンボルとしてフラグを立て、エラーが発生します。
これを修正するには、仮想関数の定義を提供する必要があります。
1 |
|
宣言に定義を追加すると、リンカは欠落しているシンボルを検索する必要がなくなります。
このエラーは次のコードに似ています。スニペット:
1 2 |
|
この場合、i は別のコンパイル単位にある外部変数として宣言されます。これには、リンカーが外部参照を解決する必要がありますが、i が見つからない場合は、未解決のシンボル エラーが報告されます。
「typeinfo への未定義の参照」エラーの根本的な原因を理解することで、開発者は迅速にトラブルシューティングを行うことができます。そして、仮想関数の適切な定義を提供するか、外部シンボル参照を適切に処理することで問題を解決します。
以上がC で「Typeinfo への未定義の参照」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。