未定义的引用`vtable

use*_*592 1 c++ eclipse qt

我正在使用Qt创建一个GUI应用程序; 我尝试hello world使用Qt并且它工作得很好,但是当我创建自定义列表小部件undefined reference to 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_ */


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

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

Dan*_*rey 5

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

CustomMenuFilter::~CustomMenuFilter() { ... }
Run Code Online (Sandbox Code Playgroud)

虽然有一些(依赖于编译器的)规则描述了编译器何时发出vtable,但通常对您来说并不重要.重要的是,您需要定义dtor,然后编译器将处理vtable,因此如果您看到错误"未定义的vtable引用",请始终检查dtor.