Tengo este fragmento de código aquí. La intención es hacer una copia de initialData. Como no estoy modificando initialData de ninguna manera, creo que debería pasarlo como una referencia constante. Sin embargo, sigo recibiendo este mensaje al compilar.C++ y const - accediendo a una función miembro de una referencia de referencia
\ src \ Escena \ SceneAnimationData.cpp (23) :. Error C2662: 'SceneTrackerData :: getRect': no se puede convertir este puntero de 'const SceneTrackerData' a '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);
}
una pregunta - no const para getRect (void) implica que no puedo cambiar Rect? Sé que el compilador no puede "ver" esto, pero supongo que no todos los métodos de Rect son const. Sin todos ellos const, no puede confiar en que getRect no cambie el Rect. ¿Sería más claro (en este caso) desechar la constness en la otra función en lugar de agregarla aquí? –
Siempre que getRect no llame a ninguno de esos otros métodos no const de Rect, o haga cualquier otra modificación, getRect puede garantizar que no modifica el Rect. Eso significa que puedo llamar a getRect en un objeto const Rect; sin embargo, habría un error de compilación si intentara llamar a otro método no const en el mismo objeto. Así es como se preserva la constness: al hacer fallar las llamadas al método non-const, mientras que las llamadas al método const están permitidas. – GRB