Не удается преобразовать константный объект в Return - PullRequest
1 голос
/ 27 сентября 2019

Я не совсем уверен, что я делаю здесь неправильно.У меня есть класс, который содержит постоянный указатель на другой объект класса.Однако я получаю ошибку о невозможности конвертировать const (объект класса).Что я делаю неправильно?Неправильно ли настроен мой код в том, что я пытаюсь сделать?

Сообщение об ошибке : cannot convert 'const AppProfile' to 'AppProfile*' in return

У меня изначально было это в моем заголовочном файле class AppProfileи я изменил его на #include "appprofile.h", что помогло удалить другую ошибку.

Позже я вызову run(), который выполняет run для моего объекта AppProfile.

заголовочный файл

#ifndef APPITEM_H
#define APPITEM_H

#include <QObject>
#include <QUrl>
#include <QDir>

#include "appprofile.h"

class AppItem : public QObject
{
    Q_OBJECT

public:
    explicit AppItem(QObject *parent = nullptr);

    explicit AppItem(const AppProfile &profile,
                     QObject *parent);

    /// App Profile
    AppProfile *profile() const;

signals:

public slots:
    void run();

private:

    const AppProfile m_profile;
};

#endif // APPITEM_H

файл cpp

#include "appitem.h"
#include "appprofile.h"

AppItem::AppItem(QObject *parent) :
    QObject(parent)
{
}

AppItem::AppItem(const AppProfile &profile,
                 QObject *parent) :
    QObject(parent),
    m_profile(profile)
{
}

QString AppItem::name() const
{
    return m_name;
}

void AppItem::run()
{
    AppProfile *profile = profile();
    profile->run();
}

AppProfile *AppItem::profile() const
{
    return m_profile;
}

ОБНОВЛЕНИЕ: Продолжить вопрос относительно ответа на данный вопрос ...

Чтобы просто объяснить мои намерения, я анализирую файл json, который содержит данные, использованные для создания родительского объекта AppItem.Когда этот элемент создается, он принимает его объект AppProfile.Этот объект создается только один раз, во время создания AppItem.

Зная это, как бы вы предложили мне перейти к редактированию исходного кода вопросов, касающихся AppProfile.Предполагая, что достаточно информации.Я ценю вашу помощь.Вот как выглядит код, который я использовал бы для создания AppItem

AppProfile *profile = new AppProfile();
AppItem *appItem = new AppItem(profile);

1 Ответ

4 голосов
/ 27 сентября 2019

Для начала, либо в вашем коде есть опечатка, либо функция определена неправильно

AppProfile *AppItem::profile() const
{
    return m_profile;
}

Внутри класса член данных m_profile не является указателем.

//...
private:

    const AppProfile m_profile;
};

Итакесли объявление члена данных является действительным, то функция должна выглядеть так:

const AppProfile *AppItem::profile() const
{
    return &m_profile;
}

. Или если объявление члена данных должно выглядеть как

//...
private:

    const AppProfile *m_profile;
};

, то в любом случае функция должна вернутьуказатель на постоянные данные.

const AppProfile *AppItem::profile() const
{
    return m_profile;
}

То есть сообщение об ошибке неявно говорит о том, что в вашем коде есть опечатка

cannot convert 'const AppProfile' to 'AppProfile*' in return

И если вы в любом случае обновите опечатку, вы не можете отказаться от квалификатора const для указателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...