C ++ and const - access to const member function

I have this piece of code here. The goal is to make a copy of initialData. Since I am not modifying the initialData in any way, I believe that I should pass it as a reference to const. However, I continue to receive this message at compilation.

. \ SRC \ Scene \ SceneAnimationData.cpp (23): error C2662: 'SceneTrackerData :: getRect': cannot convert the 'this' pointer from' const SceneTrackerData 'to' SceneTrackerData & Amp; ''

#include "SceneTrackerData.h"

void SceneAnimationData::SetupData(const SceneTrackerData &initialData)
{
    // getRect(), points() and links() all return const pointers
    CloneRect(initialData.getRect());
    ClonePoints(initialData.points()->values());
    CloneLinks(initialData.links()->values());
}

void SceneAnimationData::CloneRect(const QGraphicsRectItem * initialRect) 
{
    if (initialRect != NULL)
    {
        QPointF position = initialRect->scenePos();
        QRectF rect = initialRect->rect();

        initialRect = new QGraphicsRectItem(rect);
        initialRect->setPos(position);
    }
}

void SceneAnimationData::CloneLinks(const QList<QGraphicsLineItem*> links) 
{
    links_ = new QList<QGraphicsLineItem*>(*links);
}

void SceneAnimationData::ClonePoints(const QList<QGraphicsEllipseItem*> points) 
{
    points_ = new QList<QGraphicsEllipseItem*>(*points);
}
+5
source share
5 answers

It is SceneTrackerDatahard to say without a definition , but it is likely that the function ( SceneTrackerData::getRect) is not marked as const.

That is, that (guessing):

const Rect& SceneTrackerData::getRect(void)

:

const Rect& SceneTrackerData::getRect(void) const 
                        //                     ^
                        //                     |
                        // does not logically modify the object
+13

, 23; , , const , , const.

+1

, ++-, getRect() .. const? , , , const, const_cast initialData.

. : http://docs.oracle.com/cd/E19422-01/819-3690/Cast.html

++ - ++ ++. , .

+1

, :

links_ = new QList<QGraphicsLineItem*>(*links);

points_ = new QList<QGraphicsEllipseItem*>(*points);

, links points , . , , ,

const QList<QGraphicsLineItem*>* links

links_ = new QList<QGraphicsLineItem*>(&links);  // don't actually do this

, , .

QList , , , .

+1
links_ = new QList<QGraphicsLineItem*>(*links);

, * QList, , . , , , ,

links_ = new QList<QGraphicsLineItem*>(links);

, .

, QList , . , . , , .

, , const'ness, , const . , "const_cast", const'ness . const const , , , . . ?

void bar(const Foo& f) {
     f.setX(5); // compile error, f is const
     Foo &f2 = const_cast<Foo&>(f);
     f2.setX(5); // compiles just fine
}

, , .

0
source

All Articles