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;
}
Почему он выдает «QObject :: QObject» не может получить доступ к закрытому члену, объявленному в классе «QObject» »?
Добавление конструктора копирования в класс CHIProjectData помогло.
Я предполагаю, что ваш класс CHIProjectData
куда-то копируется (с помощью созданного компилятором конструктора копирования или оператора присваивания). QObject
не может быть скопирован или назначен, поэтому это может вызвать ошибку. Однако у компилятора нет строки, на которую можно было бы указать ошибку, поэтому он выбирает какую-то строку в файле (последняя скобка является общей, поскольку именно тогда компилятор знает, должен ли он генерировать эти функции или нет, после синтаксического анализа объявления класса чтобы узнать, существуют ли они уже).
Конструктор по умолчанию для QObject
должен быть частным, и возникающая ошибка, скорее всего, связана с CHIProjectData :: CHIProjectData
(конструктор по умолчанию) неявно пытается вызвать конструктор по умолчанию базового класса. Если вы посмотрите на QObject
, вы, скорее всего, обнаружите, что он определен примерно так:
class QObject {
QObject(); //private contructor, derived classes cannot call this constructor
public:
QObject(QObject* aParent);
};
Решение состоит в том, чтобы сделать конструктор QObject
по умолчанию защищенным или открытым или вызвать другую перегрузку конструктора из по умолчанию CHIProjectData
конструктор:
CHIProjectData::CHIProjectData() : QObject(NULL){
}