C++和const - 访问const引用的成员函数

Ext*_*kun 5 c++ const

我在这里有这段代码.目的是制作initialData的副本.由于我没有以任何方式修改initialData,我认为我应该将它作为const引用传递.但是,我在编译时不断收到此消息.

.\ src\Scene\SceneAnimationData.cpp(23):错误C2662:'SceneTrackerData :: getRect':无法将'this'指针从'const SceneTrackerData'转换为'SceneTrackerData&'

#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);
}
Run Code Online (Sandbox Code Playgroud)

GMa*_*ckG 13

如果没有定义SceneTrackerData,很难说,但很可能function(SceneTrackerData::getRect)没有标记为const.

那就是(猜测):

const Rect& SceneTrackerData::getRect(void)
Run Code Online (Sandbox Code Playgroud)

应该:

const Rect& SceneTrackerData::getRect(void) const 
                        //                     ^
                        //                     |
                        // does not logically modify the object
Run Code Online (Sandbox Code Playgroud)