2016-11-16 7 views
9

मैं रूपांतरण ऑपरेटरों के साथ स्ट्रिंग और char * के साथ कक्षा बनाने की कोशिश कर रहा हूं, यह स्ट्रिंग बनाने की कोशिश करते समय संदिग्ध कॉल त्रुटि बनाता है। मान मैं निम्नलिखित वर्ग है:सी ++ ऑपरेटर स्ट्रिंग और चार * संदिग्ध त्रुटि

class A 
{ 
public: 
A(){}; 
operator const char*() const { return "a" }; 
operator const string() const { return "b" }; 
} 

और निम्नलिखित मुख्य कार्यक्रम:

int main() 
{ 
A a; 
string b = string(a); 
return 0; 
} 

basic_string को यह पैदा कर रहा अस्पष्ट कॉल त्रुटि (ए &) भी करने की कोशिश की है:

class A 
{ 
public: 
A(){}; 
operator const char*() const { return "a" }; 
explicit operator const string() const { return "b" }; 
} 

int main() 
{ 
A a; 
string b = static_cast<string>(a); 
return 0; 
} 

यह वही त्रुटि उत्पन्न करता है। मुझे अपने कोड में दोनों ऑपरेटरों की आवश्यकता है, मैं यह काम कैसे कर सकता हूं ?

ध्यान दें: स्ट्रिंग ख का उपयोग कर एक काम करता है = लेकिन मैं स्ट्रिंग की जरूरत है (क) प्रारूप काम करने के लिए अच्छी तरह से

टिप्पणी 2: का उपयोग नहीं कर स्पष्ट keywork ऑपरेटर बनाता = अस्पष्ट

+2

@ सर्गी मैं वहां स्थानीय चरम स्थान नहीं देख सकता हूं? –

+0

[संबंधित] (https://stackoverflow.com/questions/3518145/c-overloading-conversion-operator-for- कस्टम-type-to-stdstring)। –

+0

@ πάνταῥεῖ आह, हाँ, इसे डेटा सेगमेंट में संकलित किया जाना चाहिए। – Sergey

उत्तर

2

आप उन दोनों को explicit बनाने की जरूरत है और static_cast का उपयोग करें:

class A 
{ 
public: 
    A(){}; 
    explicit operator const char*() const { return "a"; }; 
    explicit operator const string() const { return "b"; }; 
}; 

int main() 
{ 
    A a; 
    string b = static_cast<string>(a); // works, b now has "b" as value 
    const char * c = static_cast< const char *>(a); // works too, c now has "a" as value 
    return 0; 
} 
संबंधित मुद्दे