Sul*_*lla 22 c++ inheritance qt qt4
class CHIProjectData : public QObject
{
public:
CHIProjectData();
CHIProjectData(QMap<QString,QString> aProjectData,
CHIAkmMetaData* apAkmMetaData = 0,
QObject* parent = 0);
private:
QMap <QString,QString> m_strProjectData;
CHIAkmMetaData* m_pAkmMetaData;
};
CHIProjectData::CHIProjectData(QMap<QString,QString> aProjectData,
CHIAkmMetaData* apAkmMetaData,
QObject* aParent)
:
QObject(aParent)
{
m_strProjectData = aProjectData;
m_pAkmMetaData = apAkmMetaData;
}
Run Code Online (Sandbox Code Playgroud)
为什么它会让"'QObject :: QObject'无法访问类'QObject'中声明的私有成员"错误?
Cal*_*itt 28
我猜你的CHIProjectData类正被复制到某个地方(使用编译器生成的复制构造函数或赋值运算符). QObject无法复制或分配,因此会导致错误.但是,编译器没有指向错误的行,因此它在文件中选择了一些行(最后一个大括号是常见的,因为在解析类声明之后编译器知道它是否应该生成这些函数看他们是否已经存在).
Igo*_*aka 13
默认构造函数QObject必须是私有的,并且您获得的错误很可能与CHIProjectData::CHIProjectData(默认构造函数)隐式尝试调用基类的默认构造函数有关.如果你看一下QObject你很可能会发现它的定义是这样的:
class QObject {
QObject(); //private contructor, derived classes cannot call this constructor
public:
QObject(QObject* aParent);
};
Run Code Online (Sandbox Code Playgroud)
解决方案是使默认QObject构造函数受保护或公共或从默认CHIProjectData构造函数调用其他构造函数重载:
CHIProjectData::CHIProjectData() : QObject(NULL){
}
Run Code Online (Sandbox Code Playgroud)
向 CHIProjectData 类添加复制构造函数就可以了。