14

特定のクラス コンストラクターとデストラクターの vtable が見つからないことに関連する、非常に奇妙なエラーが発生します。これを解決するのを手伝ってください。

アーキテクチャ i386 の未定義シンボル:

  "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()
{


}
4

3 に答える 3

8

サンプルで試してみると、これが例です。

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

変更が空であるか、仮想関数の横にある {} 内のインライン コンテンツです

class Shape{

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

    virtual ~Shape(){};
};

基本的に、非インライン仮想関数の関数定義が見つかりません。

于 2016-02-03T02:32:00.500 に答える
7

ああ!これを熟考すると、何が起こっているのかがわかると思います。私はCCNodeそれが他の誰かに属するコードであると確信しています。

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

また、他の誰かのヘッダー ファイルを使用しているが、そのオブジェクト ファイルにリンクするのを忘れている場合、リンカに のデストラクタがないため、このエラーが発生することがありますCCNode

于 2013-03-07T10:31:53.180 に答える
1

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

    class MissionController: public CCNode
    {

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

CCNode クラスの定義はどこで確認できますか? 詳細については、コンパイル エラー xcodeまたはhttp://www.parashift.com/c++-faq-lite/link-errs-missing-vtable.htmlから参照される .. の vtable を参照してください。

于 2013-03-07T10:18:45.590 に答える