私はこのように、C#のインターフェイスを模倣しようとするために使用するC++クラスがあります。これはリリースに罰金コンパイル大型のQt C++プロジェクトからですが、ときに私、私はこのエラーを得たvtableへの未定義参照はどこにありますか?
class Foo {
public:
virtual void baa();
}
を私はどのようなこと、エラー手段を知っている
をvtableのために
未定義の参照:デバッグモードでコンパイル :仮想メソッドが定義されていませんでした。私の質問は次のとおりです:
これは、デバッグ時にのみ発生し、なぜわかりません。そのメソッドを定義していないソース(つまりクラス)を見つけることはできますか?
Qt自体、コンパイラオプション、外部ツールなどを使用したいと思います。
あなたはどちらのコンパイラを使用していますか?デバッグとリリースで使用したコンパイラコマンドを投稿できますか? – CodeMouse92
通常、これは 'virtual'関数を宣言したが、ボディを提供しなかったことを意味します。すべての仮想関数は、純粋な仮想関数を除き、本体を持たなければなりません。たとえ彼らが呼ばれなくても。 –
@ M.Mでは、すべての 'virtual'メソッドのボディを正確に持つことは良いことですが、そのクラスのオブジェクトがインスタンス化されているメソッドボディのみが必要です。例えば、私が 'class B'とその派生した' class D'を持っているとします。 'B'のオブジェクトを作成せずに' virtual void f(); 'を呼び出すと、未定義の' virtual'メソッドでまだ生きています。ところで、純粋な '仮想 'メソッドの場合、本体が必須ではないにもかかわらず、依然としてクラス本体の外側で定義することができます。 – iammilind