2016-11-16 1 views
9

Ich versuche, eine Klasse mit Konvertierungsoperatoren zu Zeichenfolge und char *, das macht mehrdeutige Aufruf Fehler beim Versuch, eine Zeichenfolge zu erstellen. annehmen ich habe die folgende Klasse:C++ Operator Zeichenfolge und char * verursacht mehrdeutigen Fehler

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

und die folgenden Hauptprogramme:

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

dies verursacht mehrdeutig Aufruf Fehler basic_string (A &) auch versucht, die folgenden:

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; 
} 

Dies verursacht den gleichen Fehler. Ich brauche beide Operatoren in meinem Code, wie kann ich machen dies funktioniert?

Anmerkung: string b mit = a funktioniert, aber ich brauche die Zeichenfolge (a) Format 2 aswell

Notiz zu arbeiten: nicht mit expliziten keywork Operator macht = mehrdeutig

+2

@Sergey Ich kann dort eine lokale Variable nicht erkennen? –

+0

[Verbunden] (https://stackoverflow.com/questions/3518145/c-overloading-conversion-operator-for-custom-type-to-stdstring). –

+0

@ πάνταῥεῖ Ah, ja, es sollte in das Datensegment kompiliert werden. – Sergey

Antwort

2

Sie benötigen sie beide explicit zu machen und verwenden 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; 
} 
Verwandte Themen