2016-11-24 7 views
0

Linux上でGCCで私が手:"vtable ..への未定義参照" - どのメソッドが定義されていないかを知る方法?

undefined reference to `vtable for MyClass' 

問題があり、MyClassの祖先は約100純粋仮想メソッドを持っている、と私は定義されていないそれらのどれか分かりません。私は本当に調べるためにそれらのすべてを通過する必要がありますか?

+1

これを見てください:http://stackoverflow.com/a/3065223 – Jonas

+0

@Jonas:それは "はい"を意味しますか? –

+0

はい、いいえ。 (上のリンクから)試してみることができます: 'nm -C NameOfObjectFile.o | grep MyClass :: ' – Jonas

答えて

1

@Jonasコメントからのリンクを下に述べたように最初は、仮想メソッドが定義されていない宣言した場合、メッセージ「vtableのために未定義の参照は」のみ起こる:https://stackoverflow.com/a/28458010/1274747

そして、私はちょうど今しようとしたとして、この実際にはそうです。最初に宣言されたオーバーライドされた仮想メソッドが定義されていない場合、vtableエラーが発生します。行の下にある他の関数が定義されていない場合、その特定のメソッドの定義されていない参照エラーが発生します。

例:

struct base 
{ 
    virtual ~base() {} 
    virtual int func1() = 0; 
    virtual int func2() = 0; 
}; 

struct derived: base 
{ 
    virtual int func1(); 
    virtual int func2(); 
}; 

// switch the comment to define one or the other 
int derived::func1() // undefined reference to `derived::func2()' 
// int derived::func2() // "undefined reference to `vtable for derived'" 
{ 
    return 5; 
} 

int main() 
{ 
    derived d; 
    return 0; 
} 

意味し、(それはまた、仮想デストラクタかもしれない)の派生クラス内で宣言され、最初の仮想機能をチェック。

+0

Thanx!コンパイラ/リンカが私にそれを伝えるほどスマートだったらそれはいいでしょう:) –

関連する問題