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.


Anmelden zum Antworten