求助:编译时出现undefined reference to `vtable for Item'错误的原因?
错误原因分析:undefined reference to `vtable for Item'
这个链接器错误的核心原因是Item类的虚析构函数没有实现:
- 在
Item.h中声明了虚析构函数:virtual ~Item(); - 但对应的
Item.cc文件里只实现了构造函数,完全没写析构函数的实现代码。
C++规则里,只要类包含虚函数,编译器就会生成虚函数表(vtable)。如果某个虚函数只有声明没有实现,链接器会找不到该函数对应的vtable条目,直接抛出这个错误。
另外提个小细节:你的CMakeLists.txt里把item.h加到SOURCES列表里是多余的,CMake只需要添加.cc这类实现文件,头文件会通过代码里的#include自动关联,不过这不是当前错误的诱因。
解决方法很直接,在Item.cc里补上析构函数的实现:
#include "item.h" Item::Item(){} Item::~Item(){} // 添加这一行
内容的提问来源于stack exchange,提问作者binary_psychic
相关产品推荐
相关产品推荐

