के सदस्य फ़ंक्शन तक पहुंचने के लिए मेरे पास कोड का यह स्निपेट है। इरादा प्रारंभिक डेटा की एक प्रति बनाना है। चूंकि मैं किसी भी तरह से प्रारंभिक डेटा को संशोधित नहीं कर रहा हूं, मुझे लगता है कि मुझे इसे एक कॉन्स्ट संदर्भ के रूप में पास करना चाहिए। हालांकि, संकलन करते समय मैं यह संदेश प्राप्त करता रहता हूं।सी ++ और कॉन्स - एक कॉन्स संदर्भ
\ src \ दृश्य \ SceneAnimationData.cpp (23) :। त्रुटि C2662: 'SceneTrackerData :: getRect': नहीं कर सकते परिवर्तित 'इस' से 'स्थिरांक 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);
}
एक प्रश्न - getRect (शून्य) के लिए कोई आधार नहीं है कि मैं Rect को बदल नहीं सकता? मुझे पता है कि कंपाइलर इसे "देख" नहीं सकता है - लेकिन मेरा अनुमान है कि Rect के सभी तरीकों का आधार नहीं है। उनमें से सभी के बिना, आप Rect को बदलने में getRect पर भरोसा नहीं कर सकते हैं। क्या यह स्पष्ट होगा (इस मामले में) इसे जोड़ने के बजाए अन्य फ़ंक्शन में स्थिरता को दूर करने के लिए? –
जब तक getRect Rect के उन अन्य गैर-कॉन्स्ट तरीकों में से किसी एक को कॉल नहीं करता है, या कोई अन्य संशोधन करता है, तो getRect गारंटी दे सकता है कि यह Rect को संशोधित नहीं करता है। इसका मतलब है कि मैं एक कॉन्स रेक्ट ऑब्जेक्ट पर getRect को कॉल कर सकता हूं - हालांकि, एक संकलन त्रुटि होगी यदि मैंने एक ही ऑब्जेक्ट पर एक और गैर-कॉन्स्ट विधि को कॉल करने का प्रयास किया। इस तरह स्थिरता संरक्षित है: गैर-कॉन्स विधि कॉल होने से, जबकि कॉन्स्ट विधि कॉल की अनुमति है। – GRB