JokerMartini
JokerMartini

Reputation: 6147

Cannot convert const object in Return

I'm not entirely sure what I'm doing incorrectly here. I have a class which contains a constant pointer to another class object. However I'm getting an error about not being able to convert the const (class object). What am I doing wrong? Is my code setup incorrect in the what I'm trying to do?

Error message: cannot convert 'const AppProfile' to 'AppProfile*' in return

I initially had this in my header file class AppProfile and i changed it to #include "appprofile.h" which helped remove another error.

I later will call run() which executes run on my AppProfile object.

header file

#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 file

#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;
}

UPDATE: Follow up question reguarding the answer givens given...

To simply explain my intentions, I'm parsing a json file that contains data used to create the parent object AppItem. When this item is constructed, it takes in it's construct an AppProfile object. This object is only ever created once, at the time in which AppItem is created.

Knowing that, how would you suggest i move forward editing the original questions code relating to AppProfile. Assuming that's enough information. I appreciate you help. This is what the code looks like that I would use to create an AppItem

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

Upvotes: 1

Views: 984

Answers (1)

Vlad from Moscow
Vlad from Moscow

Reputation: 311038

For starters either there is a typo in your code or the function is defined incorrectly

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

Within the class the data member m_profile is not a pointer.

//...
private:

    const AppProfile m_profile;
};

So if the declaration of the data member is valid then the function should look like

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

Or if the data member declaration should look like

//...
private:

    const AppProfile *m_profile;
};

then in any case the function shall return a pointer to constant data.

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

That is the error message implicitly says that there is a typo in your code

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

And if you will update the typo in any case you may not discard the qualifier const for the pointer.

Upvotes: 4

Related Questions