本文共 1477 字,大约阅读时间需要 4 分钟。
在开发过程中,遇到继承自QObject后出现编译错误的问题。错误信息提示“error C2248 'QObject::QObject' : cannot access private member declared in class 'QObject'”,这意味着在基类QObject中构造函数被私藏,无法被子类访问。
QObject(),防止外部直接创建对象。基类::构造函数会触发私藏函数的访问,导致错误。避免在构造函数中调用基类构造:
使用静态成员函数:
友元函数:
class LHTFileVersionItem : public QObject { Q_OBJECT friend class SomeFriend; public: explicit LHTFileVersionItem(); private: Q_DISABLE_COPY(LHTFileVersionItem) // 其他成员}; 检查是否需要继承:
移除基类构造函数调用:
基类::基类()的调用。例如: LHTFileVersionItem::LHTFileVersionItem() { // 不需要调用基类构造 // 可以直接初始化成员变量 m_hFileVersionPointer = new FileVersionItem();} 使用静态初始化:
LHTFileVersionItem::LHTFileVersionItem() { static initStaticMembers(); // 初始化其他成员} 友元声明:
class LHTFileVersionItem : public QObject { Q_OBJECT friend class SomeFriend; friend struct SomeStruct; public: explicit LHTFileVersionItem(); private: Q_DISABLE_COPY(LHTFileVersionItem) // 其他成员}; 反问与验证:
通过移除基类构造函数调用,结合友元声明和静态初始化方法,可以有效解决继承自QObject后出现的编译错误。关键在于理解私藏构造函数的限制,并找到合适的替代方式来完成对象的初始化。
转载地址:http://utxfk.baihongyu.com/