zoukankan      html  css  js  c++  java
  • 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”的错误

    懒惰不会让你一下子跌到 但会在不知不觉中减少你的收获; 勤奋也不会让你一夜成功 但会在不知不觉中积累你的成果 越努力,越幸运。
  • 相关阅读:
    unreal python commandlet print log
    三维空间坐标系变换公式
    Android Volley初探:Volley基本用法
    Android View学习笔记(四):Scroller的原理剖析及使用(下)
    Android View学习笔记(三):Scroller的原理剖析及使用(上)
    Android View学习笔记(二):View滑动方式总结
    Android View学习笔记(一):View基础知识
    获取NavigationBar状态与高度
    解决RecyclerView.getChildAt(Position)崩溃
    RecyclerView瀑布流的那些坑
  • 原文地址:https://www.cnblogs.com/Rainingday/p/6180933.html
Copyright © 2011-2022 走看看