未定義のシンボル: "vtable" および "typeinfo"
提供されたコードでは、リンク エラーが発生し、次のメッセージが表示されます。
Undefined symbols: "vtable for Obstacle", referenced from: Obstacle::Obstacle()in Myworld.o "typeinfo for Obstacle", referenced from: typeinfo for RECTANGLEin RECTANGLE.o typeinfo for CIRCLEin CIRCLE.o
「vtable」と「typeinfo」について
エラーの解決
このエラーの根本原因は、抽象基本クラス Obstacle に非-純粋な仮想関数。クラスが純粋仮想関数 (virtual void Method() = 0;) を宣言すると、派生クラスが実装をオーバーライドする必要があることを意味します。
Obstacle で非純粋仮想関数を定義した場合、コンパイラーはは、その実装が基本クラスまたは派生クラスのいずれかで見つかることを期待します。ただし、これらの実装が提供されていない場合、コンパイラはそれらの関数に依存する内部構造 (vtable および typeinfo) を生成します。リンク時に、欠落している関数により未定義シンボル エラーが発生します。
解決策
この問題を解決するには、抽象基本クラス Obstacle 内のすべての仮想メソッドが宣言されていることを確認してください。純粋な仮想関数として。これにより、派生クラスはこれらのメソッドをオーバーライドして実装するようになります。そうすることで、正しい仮想メソッドの実装が提供され、未定義のシンボル エラーが発生することなくリンク プロセスが成功するはずです。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3