现在的位置: 首页 > 综合 > 正文

QT里的错误类型之一

2014年11月13日 ⁄ 综合 ⁄ 共 623字 ⁄ 字号 评论关闭

undefined reference to `vtable for SqlOperator'  错误类型

按照文中所说稍微修改了一下,在析构函数后面添加了{},再make,成功了,高兴啊!问题终于解决了。我的所有虚函数都是有定义的,没想到就因为写基类的这个虚析构函数大意,没写函数体就出现了一个困扰我几天的莫名其妙的错误。就virtual ~CSgAnalyseStatBase();和virtual ~CSgAnalyseStatBase() {};的区别,编译可以通过却搞出个莫名其妙的链接错误。链接器linker需要将虚函数表vtable 放入某个object file,但是linker无法找到正确的object文件。这个错误常见于刚刚创建一系列有继承关系的class的时候,这个时候很容易忘了给base
class的virtual function加上函数实现。解决办法:给基类的virtual函数加上本来就应该有的function body。当含有虚函数的类未将析构函数声明为virtual时也会出现这个链接错误。不管如何,问题解决了,再辛苦也是值得的,以后在写代码时一定要严谨。

奇怪的是,在VS2010里面对虚构函数后面virtual ~CSgAnalyseStatBase(){};加{},却编译不得通过,有错误,   但是到linux里面 的话不加{},变成~CSgAnalyseStatBase()却又是错误,奇怪在QT里面虚构函数加了{},再make就又好了

抱歉!评论已关闭.