c++中缺少虚函数表错误

c++ a missing vtable error

本文关键字:函数 错误 c++      更新时间:2023-10-16

我得到了一个非常奇怪的错误,涉及到一个给定的类构造函数和析构函数缺少虚函数表。请帮我解决这个问题。

体系结构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()
{

}

找到了,试着用样例,下面是一个例子。

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(){};
};

基本上,它没有找到非内联虚函数的函数定义

啊!仔细想想,我想我明白发生了什么。我敢打赌CCNode是属于别人的代码。

继承的虚函数在派生类中也是虚函数…通常的做法是将析构函数设为虚函数。您可能没有意识到析构函数是虚函数。

如果你正在使用别人的头文件,但忘记链接到他们的目标文件,它可能会导致这个错误,因为链接器会丢失CCNode的析构函数

尝试在类中添加虚拟析构函数。CCNode可能包含了一些虚拟方法,而你的编译器无法处理它。

    class MissionController: public CCNode
    {
      public:
         MissionController();
        virtual ~MissionController();
    };

是一些公共框架,我们在哪里可以看到CCNode类定义?参见vtable ..参考编译错误xcode或http://www.parashift.com/c++-faq-lite/link-errs-missing-vtable.html为更多的帮助。