Qt编译错误 error: undefined reference to `vtable for

qt中会不小心遇到error: undefined reference to `vtable for ....'原来是是子类的一个虚函数声明了,但是,在.cpp中没有定义 实现代码。

比如在.h中把~hellodialog()屏蔽掉后;

 1 class hellodialog : public QDialog
 2 {
 3     Q_OBJECT
 4 public:
 5     explicit hellodialog(QWidget*parent = 0);
 6    // ~hellodialog();
 7 
 8 signals:
 9 
10 public slots:
11 
12 private:
13    // Ui::hellodialog *ui;
14 };

而在.cpp中把~hellodialog()的定义也去掉

 1 hellodialog::hellodialog(QWidget *parent) : QDialog(parent)
 2 {
 3     //ui = new Ui::hellodialog;
 4     //ui->setupUi(this);
 5 }
 6 
 7 //hellodialog::~hellodialog()
 8 //{
 9  //   delete ui;
10 //}

就不会报错了。当我们把这两个屏蔽都去掉后,就会报错。

在其他博客上看到比较好的知识点,粘贴过来:

    比如:
    class QParent
    {
      public:
         QParent();
         virtual ~QParent(); 
          ...//其它代码
    };
    class QChild:public QParent
    {
      public:
         QChild();
         ~QChild();
          ...//其它代码
    };
显然类QChild的析构函数~QChild()是一个虚函数,必须得定义它。所以在QChild的实现.cpp文件中
应该添加该函数的实现部分,如下
    QChild::~QChild()
   {
     ...//实现代码
   }
如果你认为QChild不需要释放资源,不需要添加实现代码,可以把类声明改一下即可,如下
class QChild:public QParent
    {
      public:
         QChild();
         ~QChild(){};
          ...//其它代码
    };
红色部分为添加部分,如果不添加也不在实现.cpp文件添加该虚函数的实现就会出“undefined reference to `vtable for QChild”的错误

posted @ 2016-12-14 21:19  不明白就去明白  阅读(5021)  评论(0编辑  收藏  举报