目的
解决C++ undefined reference to vtable for xxx
类型问题. 主要是由于某种原因导致Makefile里面obj文件没有这个类并没有Q_OBJECT信息,所以在执行Makefile时候也就没有moc xxx.h,最终导致编译连接时候符号决议没找到对应符号。可能你在该类中即使直接或者间接继承自QObject, 并附加有Q_OBJECT, 如果qmake, 重新构建后,但是仍然报此错误, 建议查看pro文件引用include 路径是不是不对 ,我的是这个问题导致, 主要是未链接目标文件导致
stackoverflow
说:
总之,导致“对vtable的引用未定义”错误的三个主要原因:
1. 成员函数缺少其定义。
2. 未链接目标文件。
3. 所有虚函数都有内联定义。
这些原因本身不足以独自导致错误。而是,这些是您解决错误所要解决的问题。不要指望有意制造这些情况中的一种肯定会产生此错误;还有其他要求。请确保解决这些情况将解决此错误。
解决方案:
-
查看您的类定义。查找第一个非内联虚拟函数,该函数不是纯虚函数(不是“ = 0”),并且要提供其定义(不是“ = default”)。
如果没有这样的功能,请尝试修改您的类,以便有一个。(错误可能已解决。) -
查找该函数的定义。如果丢失,请添加!(错误可能已解决。)
-
检查您的链接命令。如果它没有使用该函数的定义提及目标文件,请修复该问题!(错误可能已解决。)
-
对每个虚拟功能重复步骤2和3,然后对每个非虚拟功能重复步骤2,直到错误解决。如果仍然遇到问题,请对每个静态数据成员重复此操作。