【发布时间】:2013-02-22 07:00:48
【问题描述】:
我收到一个非常奇怪的错误,与给定类构造函数和析构函数缺少 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)
代码sn-p;
.h 文件:
class A: public B
public:
A();
~A();
};
.cpp 文件..
A::A()
{
}
A::~A()
{
}
【问题讨论】:
-
注意:缺少 vtable 通常意味着第一个非内联虚拟成员函数没有定义。
-
我认为您的错误出在您未发布的代码中。例如CCNode中定义了哪些virtual函数
-
正如编译器所说,可能缺少虚函数。我经常忘记包含纯虚析构函数的定义,这在纯虚析构函数的情况下实际上是必需的。
-
@user1908860,如果您删除
CCNode基类,则不可能出现此错误,因为如果类没有虚函数,则它不需要 vtable。所以你没有显示真实的代码,或者你在更改代码后没有正确(重新)构建你的项目,或者你在撒谎。 -
我在尝试覆盖非虚拟父方法时遇到了类似的错误。
标签: c++