2016-08-11 3 views
-3

I einfache Umwandlungsmethode definiertKlasse Umwandlung funktioniert nicht wie erwartet

operator string() { return /*...*/; } 

Als ich es

direkt anrufen
obj.operator string() 

Es funktioniert gut, aber wenn ich es auf diese Weise nennen ...

(string)obj 

Ergebnis ist leere Zeichenfolge.

Was ist los? (Ich bin mit gcc C++ 14) (kann Code schreiben Wenn erforderlich)

Klasse

class String : public std::string { 
     std::string str_; 
    public: 
     String() {}; 
     String(const String & s) { 
     str_ = std::string(s.str_); 
     }; 
     String(String && s) { 
     str_ = std::string(s.str_); 
     }; 
     String(const string & s) { 
     str_ = std::string(s); 
     }; 
     String(const char * s) { 
     str_ = std::string(s); 
     }; 

     char & operator[](size_t i) { 
     return str_[i]; 
     }; 
     String & operator=(const String & str) { 
     if (this != &str) { 
      str_ = str.str_; 
     } 
     return *this; 
     }; 
     String & operator=(String && str) { 
     if (this != &str) { 
      str_ = str.str_; 
     } 
     return *this; 
     }; 

     bool operator==(const String & str) { 
     return str_ == str.str_; 
     }; 
     bool operator!=(const String & str) { 
     return str_ != str.str_; 
     }; 

     operator string() { 
     return str_; 
     }; 
    }; 
+1

Bitte ** [edit] ** Ihre Frage mit einem [mcve] oder [SSCCE (Kurzes, eigenständiges, korrektes Beispiel)] (http://sscce.org) – NathanOliver

+4

Warum leiten Sie öffentlich von 'std ab: : string' und dann separate Mitgliedsinstanz? Sie schneiden und rufen den Conversion-Operator nicht auf. – LogicStuff

+0

Nun, nicht mit C++ für eine Weile, also keine Ahnung, was du meinst – Seraph

Antwort

4

Das Problem ist, dass Ihre Klasse von std::string ableitet.

Entfernen Sie den : public std::string Teil und der Konvertierungsoperator wird verwendet.

Ihre Klasse deklariert bereits ein std::string Mitglied (also verwendet es die "hat-a" -Ansatz) und benötigt nicht die "ist-a" -Ansatz.

Übrigens ist das Ableiten von Standardbibliotheksklassen fast immer eine schlechte Idee (sie wurden nicht dafür entworfen).

+0

Danke, was für ein Chaos in meinem Code ... – Seraph

Verwandte Themen