2011-06-08 11 views
5

लौटें मैं एक सदस्य चर होना चाहता हूं, जो एक डबल पॉइंटर है। ऑब्जेक्ट, डबल पॉइंटर पॉइंट को क्लास के बाहर से संशोधित नहीं किया जाएगा।केवल पढ़ने के लिए डबल पॉइंटर

मेरे निम्नलिखित कोशिश एक "करने के लिए से अवैध रूपांतरण 'std :: स्ट्रिंग **' 'स्थिरांक std :: स्ट्रिंग **'"

class C{ 

public: 
    const std::string **getPrivate(){ 
     return myPrivate; 
    } 

private: 
    std::string **myPrivate; 
}; 
  • पैदावार क्यों एक ही है अगर मैं केवल एक साधारण सूचक का उपयोग करता हूं तो वैध बनाएं std::string *myPrivate
  • केवल पढ़ने-पढ़ने वाले डबल पॉइंटर को वापस करने के लिए मैं क्या कर सकता हूं?

    क्या यह एक स्पष्ट कलाकार return (const std::string**) myPrivate करने के लिए अच्छी शैली है?

+0

आप क्या बनाना चाहते हैं: पॉइंटर या पॉइंट स्ट्रिंग? –

+0

स्पष्ट नहीं होने के लिए खेद है, मैंने अपनी पोस्ट संपादित की है। इसकी स्ट्रिंग स्वयं ही संशोधित नहीं की जाएगी। – Hugo

+1

उनके बारे में सोचकर "डबल पॉइंटर्स" आपकी समस्या का मूल हो सकता है। "डबल पॉइंटर" शब्द एक ऐसा होता है जब तक मैं एसओ में नहीं आया, और मुझे यह जानने में दिलचस्पी होगी कि कौन सा नाइटविट (एसओ पर जरूरी नहीं है) इसका जन्म हुआ। –

उत्तर

3

इस प्रयास करें:

const std::string * const *getPrivate(){ 
    return myPrivate; 
} 

स्थिरांक std :: स्ट्रिंग के साथ परेशानी ** है कि यह फोन करने वाले संकेत में से एक है, जो स्थिरांक के रूप में घोषित नहीं किया गया है संशोधित करने के लिए अनुमति देता है। यह पॉइंटर और स्ट्रिंग क्लास दोनों ही बना देता है।

+0

+1 यहां तक ​​कि मैं 'const' के आपके आदेश से असहमत हूं। –

2

आप वास्तव में चुनने की करना चाहते हैं:

class C { 

public: 
    std::string const* const* const getPrivate(){ 
     return myPrivate; 
    } 

private: 
    std::string **myPrivate; 
}; 
2

ग में बहुत दुर्लभ मामलों ++ जब एक कच्चे सूचक (यहां तक ​​कि कम एक डबल सूचक के लिए) वास्तव में जरूरत है कर रहे हैं, और अपने मामले नहीं है उनमें से एक होने के लिए seams। एक मूल्य या संदर्भ वापस करने का एक उचित तरीका होगा, जैसे:

class C{ 

public: 
    const std::string& getPrivate() const 
    { 
     return myPrivate; 
    } 

private: 
    std::string myPrivate; 
}; 
+0

यह मेरा पसंदीदा तरीका भी होगा - खासकर एक स्ट्रिंग के साथ, लेकिन मुझे नहीं पता था कि पोस्टर के पास कुछ अन्य प्रकार था जो वास्तव में इसकी आवश्यकता हो सकती है ... –

+0

शायद मुझे अपनी प्रेरणा लिखी जानी चाहिए: मैं चाहता हूं दो इंडेक्स x [0] [1] के साथ एक सरणी तक पहुंच है, इसलिए मैंने पॉइंटर्स की एक सरणी बनाई है। लेकिन यद्यपि मेरे कोड को दूसरी स्थिति में बदलना संभव हो सकता था, लेकिन मैं जानना चाहता था कि "डबल-पॉइंटर्स" को कैसे संभालना है या समर्थक कॉल पॉइंटर्स-टू-पॉइंटर्स कैसे हैं। – Hugo

संबंधित मुद्दे