2010-02-25 16 views
5

मैं एक वर्ग है जो इस तरह लगभग दिखता है:सी ++ का उपयोग करते हुए 'इस' एक पैरामीटर के रूप

class MeshClass 
{ 
public: 
    Anchor getAnchorPoint(x, y) 
    { 
     return Anchor(this, x, y); 
    } 
private: 
    points[x*y]; 
} 

मैं एक वर्ग है जो एक "एंकर" बिंदु जो जाल के लिए उपयोग हो और संशोधित कर सकते हैं का प्रतिनिधित्व करता है बनाना चाहते बिंदु, इस तरह:

class Anchor 
{ 
public: 
    Anchor(&MeshClass, x, y) 
    moveAnchor(x, y); 
} 

समस्या है जब मैं return Anchor(this, x, y) तरह MeshClass::getAnchorPoint विधि, कुछ में Anchor बनाने की कोशिश लेकिन क्योंकि this स्थिरांक है मैं नहीं कर सकता। एक कामकाज के रूप में जब तक मुझे यह पता नहीं चलता है कि मेरे पास एंकर ने बिंदु और संदर्भ के संदर्भ को स्वीकार कर लिया है, एंकर सीधे बिंदु को स्थानांतरित करता है।

संपादित करें: समस्या सबसे अधिक संभावना है कि मैं संदर्भ का उपयोग करने की कोशिश कर रहा था। मैं सामान्य रूप से एक सूचक का उपयोग करने के लिए बदल गया और मैं this में संकलक से कोई शिकायत नहीं कर सकता। मुझे यकीन है कि मुझे इस आधार से संबंधित एक त्रुटि मिल रही थी, लेकिन मैं इसे फिर से नहीं बना सकता, इसलिए मुझे बस अपने दिमाग से बाहर होना चाहिए।

+0

हाय, मेरे लिए अपने संकलित करने के लिए ... यह करता है नहीं लगता है? –

+1

यह शायद (अभी तक) नहीं है :) ध्यान रखें कि (कम से कम सादे पुराने सी में), यदि प्रकार निर्दिष्ट नहीं है, तो यह int को डिफ़ॉल्ट करता है, लेकिन चेतावनी फेंकता है। –

+2

कृपया उस वास्तविक कोड को पोस्ट करें जिसे आप उपयोग करना चाहते हैं और यह उत्पन्न उत्पन्न त्रुटि। (आपने उस त्रुटि के आसपास काम करने की कोशिश नहीं की।) वर्तमान में यह अनुमान लगाने में थोड़ा मुश्किल है कि आप क्या करने की कोशिश कर रहे हैं। –

उत्तर

8

सी ++ में, यह एक सूचक है, संदर्भ नहीं। आप कुछ इस तरह कर सकता है:

class Anchor; //forward declaration 

class MeshClass 
{ 
public: 
    Anchor getAnchorPoint(int x, int y) 
    { 
     return Anchor(*this, x, y); 
    } 
private: 
    int points[WIDTH*HEIGHT]; 
} 

class Anchor 
{ 
public: 
    Anchor(MeshClass &mc, int x, int y); 
} 
+0

यह शायद मेरी समस्या थी। मैंने एंकर को एक संदर्भ के बजाय एक सूचक स्वीकार करने का निर्णय लिया, इस मामले में अब यह 'पैरामीटर' पैरामीटर के रूप में ठीक काम करता प्रतीत होता है। – Winder

1

आपको क्यों लगता है कि this है? this एक सूचक है, संदर्भ नहीं। यह return Anchor(*this, x, y); नहीं होना चाहिए?

+0

तकनीकी रूप से, यह वास्तव में _is_ const, * यह नहीं है। – Joel

+0

तकनीकी रूप से, 'यह' कॉन्स्ट-क्वालिटी नहीं है। यह संशोधित नहीं है क्योंकि यह एक रैल्यू है, न कि क्योंकि यह स्थिर है। इसका मतलब है कि 'इस' में 'कक्षा *' टाइप है, लेकिन * नहीं * 'कक्षा * const'। –

0

आप एक const MeshClass& पैरामीटर के रूप में स्वीकार करने के लिए लंगर बदलने, या लंगर बनाते समय (MeshClass) रूप इस डाली सकते हैं? मुझे यकीन नहीं है कि this की स्थिरता को हटाने के लिए कोई const_cast<MeshClass>(this) का उपयोग कर सकता है या नहीं।

2

इस की constness एक समस्या नहीं है। पॉइंटर स्वयं ही स्थिर है, न कि वह मान जो इंगित करता है।

आपका वास्तविक समस्या यहाँ है:

class MeshClass 
{ 
public: 
    Anchor getAnchorPoint(x, y) 
    { 
     return Anchor(*this, x, y); 
    } 
private: 
    points[x*y]; 
} 
संबंधित मुद्दे