2015-07-03 100 views
0

我正在使用C++编写Qt中的程序。但是由于这个错误,我在这一点上陷入困​​境。奇怪的是我创建了一个单独的程序,其中下面的代码工作,但是当我把代码放入我的程序中时,我得到一个错误。Qt:对'vtable'的未定义引用

error: undefined reference to `vtable for Create_button_config' 

该错误是在我创建类的头文件中。这是发生错误的头文件的一部分。

class Create_button_config : public QObject 
{ 
    Q_OBJECT 

public: 

    QMap<QString, QString> buttons; 

    void setParameters(){ 
     qDebug() << "test"; 
     buttons["ID1"] = "#52B1"; 
     buttons["ID2"] = "#52B2"; 
     buttons["ID3"] = "#52B3"; 

    } 
}; 

我用它在main.cpp中这样

Create_button_config config; 
config.setParameters(); 

哪里这个错误来自任何想法? 顺便说一句,这是一个正确的方式来制作一个可用于整个代码的关联数组?

预先感谢

+5

尝试“运行QMAKE” – Chernobyl

+0

看看类似的问题在这里 - http://stackoverflow.com/questions/2555816/qt-object-linker-problem-undefined-reverence-to-vtable 另外,做在做'qmake'和重建之前,不要忘了'干净',甚至在项目之前用手干净。 – troyane

+1

我不确定系统是否出现问题,但是对于我**删除生成目录**修正了问题。 (甚至“全部清理”还不够)。我想这是因为'moc'(生成)文件无法访问标题。我希望这会帮助某人。 – michalis

回答

8

缺失一个虚函数表的通常是不能包括在moc接头参数的输出的症状。确保您在标题上运行了moc,并且链接了结果。

请注意,如果你使用qmake,您可能需要重新运行qmake产生新的makefile文件,如果你改变了一个类,这不是Q_OBJECT,使现在Q_OBJECT - 它不会否则知道moc应该运行。

顺便说一句,添加一个构造函数是一个好主意,该构造函数采用可选父项QObject,以获得用户需要的Qt内存管理(释放子对象)的一些好处。

+0

谢谢!我以为我已经重建了整个项目,当时它没有工作。但是几天后我又回到了它,现在它正在工作。谢谢你的帮助! – Martijn

相关问题