[gelöst] Operator Überladung, unbekannte Überladung trotz definition



  • Hallo,

    mir ist ein merkwürdiger "Fehler" beim überladen von Operatoren untergekommen. Ich habe für eine Klasse den Operator + überladen. Als Beispiel hier die Headerdatei der Klasse Foo. Diese soll nur einen Integer als Variable haben. Zudem wird die Überladung Foo+int deklariert.

    foo.h

    class Foo
    {
    public:
        Foo();
        int x;
    };
    
    Foo operator+(Foo &lhs, int &rhs);
    

    In der cpp Datei wird der Konstruktor sowie die Operator-Überladung ausdefiniert. Nichts besonderes bis jetzt.
    foo.cpp

    Foo::Foo()
    {
        this->x = 0;
    }
    
    Foo operator+(Foo &lhs, int &rhs)
    {
        Foo newFoo;
        newFoo.x = lhs.x + rhs;
        return newFoo;
    }
    

    In der Main-Datei soll nun eine Instanz von Foo erstellt werden und die addition getestet werden. Wenn ich den Integer zuerst definiere (Zeile 7-9) geht die Addition auch wunderbar. Möchte ich hingegen einen "vorher nicht definierten Integer" addieren (Zeile 11-12) bekomme ich eine Fehlermeldung:
    no match for 'operator+' (operand types are 'Foo' and 'int')
    Foo bar2 = myFoo + 2;

    main.cpp

    int main()
    {
        Foo myFoo;
        myFoo.x = 3;
        cout << "myFoo.x = " << myFoo.x << endl;
    
        // this will work
        int myInt = 2;
        Foo bar1 = myFoo + myInt;
    
        // but this won't
        Foo bar2 = myFoo + 2;
    
        cout << "bar1.x =" << bar1.x << endl;
    
        return 0;
    }
    

    Ist dieses Verhalten so gewollt, oder habe ich einen Fehler gemacht? Was kann ich ändern damit so eine "on-the-fly" Addition funktioniert?

    Ich nutze den Qt-Creator 3.0.0 (Based on Qt 5.2.0) mit absoluten Standarteinstellungen. Dieser nutzt glaube ich gcc in der Version 4.8.0 zum kompilieren.

    Gruß,
    Nobody-86



  • Foo operator+(Foo const &lhs, int const &rhs);
    
    Foo operator+(Foo const &lhs, int rhs);
    
    Foo operator+(Foo lhs, int rhs);
    

    Aber von der 2 kannste keine einfache Referenz ziehen, die hat ja keinen Speicher.



  • Hi,

    besten Dank! Ich bastel schon seit 2 Tagen daran rum und habe keine Lösung finden können. Das Minimalbeipsiel geht, mal sehen ob es auch im richtige Projekt klappt.


Anmelden zum Antworten