'QObject :: QObject' не может получить доступ к объявленному приватному члену в классе 'QObject'

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» »?

22
задан Sulla 17 August 2010 в 22:36
поделиться

3 ответа

Добавление конструктора копирования в класс CHIProjectData помогло.

4
ответ дан 29 November 2019 в 04:17
поделиться

Я предполагаю, что ваш класс CHIProjectData куда-то копируется (с помощью созданного компилятором конструктора копирования или оператора присваивания). QObject не может быть скопирован или назначен, поэтому это может вызвать ошибку. Однако у компилятора нет строки, на которую можно было бы указать ошибку, поэтому он выбирает какую-то строку в файле (последняя скобка является общей, поскольку именно тогда компилятор знает, должен ли он генерировать эти функции или нет, после синтаксического анализа объявления класса чтобы узнать, существуют ли они уже).

28
ответ дан 29 November 2019 в 04:17
поделиться

Конструктор по умолчанию для 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){
}
13
ответ дан 29 November 2019 в 04:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: