【问题标题】:in Qt, my class inherit QObject error with "vtable for GameControlCenter", referenced from:在 Qt 中,我的类使用“vtable for GameControlCenter”继承 QObject 错误,引用自:
【发布时间】:2016-10-12 08:02:08
【问题描述】:

总的错误信息是:

架构 x86_64 的未定义符号:

“GameControlCenter的vtable”,引用自:

gamecontrolcenter.o 中的 GameControlCenter::GameControlCenter()

注意:缺少 vtable 通常意味着第一个非内联虚拟成员函数没有定义。

头是:

#ifndef GAMECONTROLCENTER_H
#define GAMECONTROLCENTER_H

#include "gamewindows.h"
#include <QList>
#include <QPair>
#include <QObject>


class GameControlCenter:public QObject
{
Q_OBJECT
public:
GameControlCenter(); 

问题:

错误变成When

GameControlCenter 继承 QObject 并添加宏“Q_OBJECT”。

在此操作之前,这些代码可以正常运行。 但我需要在 GameControlCenter 头部添加插槽功能, 所以我需要继承QObject。

集成开发环境

操作系统是 OS X10.11.2。 Qt 创建者

【问题讨论】:

  • 做一个干净的构建,包括再次运行 qmake。如果您混合了源内构建和影子构建,请确保您的源内构建也被清理(因为那里的文件可以“覆盖”影子构建目录中的文件)。
  • 你在使用 Visual Studio 吗?
  • 我已经清理并重建了项目,但它不能解决问题。
  • 假设您正在处理 qmake:请参阅 this answer。假设您正在处理 CMake:打开 AUTOMOC。如果是另一个构建系统,请在问题中说明。
  • 尝试手动 qmake,而不仅仅是重建

标签: c++ qt signals-slots


【解决方案1】:
  • 确保 Q_OBJECT 宏存在于所有 QObject 派生类的定义中。
  • 确保仅在头文件中声明 QObject 派生类。
  • 确保所有头文件都列在 .pro 文件的 HEADERS= 列表中。
  • 每次将 Q_OBJECT 添加到类之一或修改 .pro 文件时运行 qmake

在我的代码中,我重复调用这个头文件。所以如果你有同样的问题,请检查你的代码是否再次包含相同的文件。

【讨论】:

    猜你喜欢
    • 2013-10-10
    • 2017-09-18
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    相关资源
    最近更新 更多