【问题标题】:Qt: Undefined reference to 'vtable' [duplicate]Qt:对'vtable'的未定义引用[重复]
【发布时间】:2015-07-03 11:34:52
【问题描述】:

我正在使用 c++ 在 Qt 中开发一个程序。但由于这个错误,我被困在这一点上。奇怪的是,我创建了一个单独的程序,其中以下代码可以工作,但是当我将代码放入我的程序中时,我得到了一个错误。

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();

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

提前致谢

【问题讨论】:

  • 尝试“运行 qmake”
  • 在这里查看类似的问题 -- stackoverflow.com/questions/2555816/… 另外,在进行 qmake 和重建之前,不要忘记 make clean 甚至手动清理您的项目。
  • 我不确定我的系统是否有问题,但对我来说删除构建目录解决了这个问题。 (即使“全部清洁”也不够)。我猜这是因为moc(生成的)文件无法访问标题。我希望这会对某人有所帮助。

标签: c++ qt vtable referenceerror


【解决方案1】:

vtable 的缺失通常是链接器参数中没有包含moc 的输出的症状。确保您在标题上运行了moc,并链接了结果。

请注意,如果您使用的是qmake,如果您更改了一个不是Q_OBJECT 的类,那么您可能需要重新运行qmake 以生成新的makefile,因此现在是Q_OBJECT - 它不会否则知道应该运行moc

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

【讨论】:

  • 谢谢!我以为我已经重建了完整的项目,但当时它不起作用。但是几天后我又回来了,现在它正在工作。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 2021-11-30
  • 2011-02-03
  • 2014-06-04
  • 2015-09-24
相关资源
最近更新 更多