我在这里有这段代码.目的是制作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)