2013-03-07 20 views
12

与えられたクラスのコンストラクタとデストラクタでvtableが見つからないという、本当に奇妙なエラーが発生しています。これを解決するために私を助けてください。 i386アーキテクチャのためのC++欠落しているvtableエラー

未定義のシンボル:

"vtable for A", referenced from: 
     A::A() in A.o 
     A::~MissionController() in A.o 
    NOTE: a missing vtable usually means the first non-inline virtual member function has no definition. 
ld: symbol(s) not found for architecture i386 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

コードスニペット。

.hファイル:

class A: public B 

    public: 
    A(); 
    ~A(); 

}; 

.cppファイル..

A::A() 
{ 


} 

A::~A() 
{ 


} 
+0

'; 'を入れてください; –

+3

注:vtableがないと、通常、最初の非インライン仮想メンバ関数には定義がありません。 – Bingo

+0

私はそれをしました。それはちょうどタイプミスのコードスニペットでした。 – user1908860

答えて

1

は、あなたのクラスに仮想デストラクタを追加してください。 CCNodeはpropablyいくつかの仮想メソッドが含まれており、あなたのコンパイラはそれに対処できませんでした。

class MissionController: public CCNode 
    { 

     public: 
     MissionController(); 
     virtual ~MissionController(); 
    }; 

いくつかの公開フレームワークは、どこでCCNodeクラス定義を見ることができますか?詳細については、vtable for .. referenced from compile error xcodeまたはhttp://www.parashift.com/c++-faq-lite/link-errs-missing-vtable.htmlをご覧ください。

7

Ah!これを見て、私は何が起こっていると思います。私はCCNodeが誰かに属するコードであることを賭けている。

あなたが継承する仮想関数は、派生クラスでも仮想です...そして、デストラクタを仮想にするのが一般的です。デストラクタが仮想であることに気付かないかもしれません。

他の人のヘッダーファイルを使用していて、オブジェクトファイルへのリンクを忘れた場合は、リンカーにデストラクタがないので、このエラーが発生する可能性があります。CCNode

4

サンプルを試してみましたが、ここには例があります。

class Shape{ 

public: 
virtual int areas(); 
virtual void display(); 

virtual ~Shape(){}; 
}; 

コンパイラは、修飾は基本的に、それはのための関数の定義が見つからない

class Shape{ 

public: 
    virtual int areas(){}; 
    virtual void display(){}; 

    virtual ~Shape(){}; 
}; 

仮想関数への次の{}内の任意のインラインコンテンツ空であるか

Undefined symbols for architecture x86_64: 
"typeinfo for Shape", referenced from: 
    typeinfo for trian in main_file.o 
"vtable for Shape", referenced from: 
    Shape::Shape() in main_file.o 
    NOTE: a missing vtable usually means the first non-inline virtual member  function has no definition. 
    ld: symbol(s) not found for architecture x86_64 
    clang: error: linker command failed with exit code 1 (use -v to see invocation) 
    make: *** [cpp_tries] Error 1enter code here 

を訴え非インライン仮想関数