QObject多继承static_meta_object的编译问题

在C++和QT环境下,当一个类继承自其他类后再继承自QObject并使用Q_OBJECT宏时,编译会出现错误。错误源于moc文件生成过程中对staticMetaObject的引用。解决方案是确保QObject总是作为最直接的基类,因为Q_OBJECT宏会在 moc 文件中为 QObject 的子类生成元对象系统所需的方法。改变继承顺序可避免此问题。
摘要由CSDN通过智能技术生成

问题描述

继承一个类,再继承自QObject并添加Q_OBJECT的宏之后,编译不过。

class A{
  public:

    A(){};

    ~A(){};

private:
    int m_aval;

};

class DerivedObject : public A,public QObject
{
    Q_OBJECT

public:
    DerivedObject();

    ~DerivedObject();

private:
    int m_dval;

};

错误信息

错误 1 error C2039: “staticMetaObject”: 不是“A”的成员 c:\Users\chuan\documents\visual studio 2010\Projects\DerivedObject\DerivedObject\GeneratedFiles\Debug\moc_derivedobject.cpp 53 DerivedObject

错误 2 error C2039: “qt_metacast”: 不是“A”的成员 c:\Users\chuan\documents\visual studio 2010\Projects\DerivedObject\DerivedObject\GeneratedFiles\Debug\moc_derivedobject.cpp 73 DerivedObject

错误 3 error C2039: “qt_metacall”: 不是“A”的成员 c:\Users\chuan\documents\visual studio 2010\Projects\DerivedObject\DerivedObject\GeneratedFiles\Debug\moc_derivedobject.cpp 78 DerivedObject

问题分析

首先,我们尝试输出该类的内存布局,分析错误原因。</

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值