未定义的参考`vtable [英] Undefined reference to `vtable

查看:181
本文介绍了未定义的参考`vtable的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Qt创建一个GUI应用程序;我尝试使用Qt来做 hello world ,它的工作原理很好,但是当我创建自定义列表窗口小部件时,我得到未定义的引用到vtable 错误当我编译它:



我正在使用eclipse和c ++

  #ifndef QMENUFILTER_H_ 
#define QMENUFILTER_H_
#include< qmenu.h>
class CustomMenuFilter:QMenu
{
Q_OBJECT
public:
CustomMenuFilter();
〜CustomMenuFilter();
private:
QMenu FilterMenu;
QAction * AddFilterAct;
QAction * DeleteFilterAct;

Q_SLOT
void contextMenuEvent(QContextMenuEvent * event);
};
#endif / * QMENUFILTER_H_ * /


#includeQMenuFilter.h
CustomMenuFilter :: CustomMenuFilter():QMenu()
{
DeleteFilterAct = new QAction(DeleteFilter,this);
AddFilterAct = new QAction(AddFilter,this);
AddFilterAct-> setText(AddFilter);
DeleteFilterAct-> setText(DeleteFilter);
}

日志文件:
http://pastebin.com/raw.php?i=qZes6bkm

解决方案

您还需要定义dtor,这将创建vtable

  CustomMenuFilter ::〜CustomMenuFilter(){...} 

虽然有一些(依赖于编译器)描述何时完全编译器发出一个vtable的规则,通常对你而言并不重要。重要的是,您需要定义dtor,编译器会照顾到vtable,所以如果您看到错误undefined reference to vtable,请始终检查dtor。


I am creating a GUI application using Qt; I try to do hello world using Qt and it works perfectly, but when I create custom list widget I get undefined reference to vtable error when I compile it:

I am using eclipse and c++

#ifndef QMENUFILTER_H_
#define QMENUFILTER_H_
#include <qmenu.h>
class CustomMenuFilter : QMenu
{
    Q_OBJECT
public:
    CustomMenuFilter () ;
    ~CustomMenuFilter() ;
private:
    QMenu FilterMenu;
    QAction *AddFilterAct ;
    QAction *DeleteFilterAct ;

     Q_SLOT
      void contextMenuEvent(QContextMenuEvent *event);
};
#endif /* QMENUFILTER_H_ */


#include "QMenuFilter.h"
CustomMenuFilter::CustomMenuFilter():QMenu()
{
    DeleteFilterAct = new QAction("DeleteFilter" , this);
    AddFilterAct = new QAction("AddFilter" , this);
    AddFilterAct->setText("AddFilter");
    DeleteFilterAct->setText("DeleteFilter");
}

LOG file : http://pastebin.com/raw.php?i=qZes6bkm

解决方案

You need to define the dtor as well, which will create the vtable

CustomMenuFilter::~CustomMenuFilter() { ... }

While there are some (compiler-dependent) rules that describe when exactly the compiler emits a vtable, it's usually not important for you to know. The important thing is, that you need to define the dtor and the compiler will take care of the vtable then, so if you see the error "undefined reference to vtable", always check the dtor.

这篇关于未定义的参考`vtable的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆