未定義のシンボル: "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 内のすべての仮想メソッドが宣言されていることを確認してください。純粋な仮想関数として。これにより、派生クラスはこれらのメソッドをオーバーライドして実装するようになります。そうすることで、正しい仮想メソッドの実装が提供され、未定義のシンボル エラーが発生することなくリンク プロセスが成功するはずです。
以上がC コードで「vtable」および「typeinfo」の未定義シンボル エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。