Problem mit Zuweisungsoperator
-
Hallo, ich habe eine Klasse, die ungefähr so aussieht:
class test { public: test(){} test(const test& t){} test(const std::string& s){} test(int i){} test& operator=(const std::string& s) { test tmp(s); tmp.swap(*this); return *this; } test& operator=(int i) { test tmp(i); tmp.swap(*this); return *this; } void swap(test& a){} };Wenn ich jetzt aber versuche, einem test objekt ein string objekt zu übergeben, erhalte ich eine Fehlermeldung:
test t = "123";error: invalid conversion from 'const char*' to 'int' error: initializing argument 1 of 'test::test(int)'Selbst wenn ich explizit einen Assignment Operator in die Klasse schreibe, bleibt der Fehler erhalten
test& operator=(const char* p) { std::string s(p); test tmp(s); tmp.swap(*this); return *this; }Woran liegt das? Sollte der Assignment Operator mit const char* nicht umgewandelt werden in std::string?
-
Erstens: C++ macht nicht zwei unsichtbare Konvertierungen. Von char[] über string zu test ist einmal zu viel. Damit es nicht irgenwann völlig willkürlich wird. Ist schon so kompliziert genug. *röchel* *lach*
Zweitens: TYP a=b; ist eine Initialisierung und keine Zuweisung, obwohl es wie eine Zuweisung aussieht. Der operator= kann jetzt gar nicht helfen. Er wäre ja nur eine Zuweisung.