C++ Operator-Überladung

rony12

Commodore Pro
Registriert
Jan. 2007
Beiträge
4.947
Hallo,

ich habe mich mal rangesetzt, die Operator-Überladung etwas zu üben - komme aber gleich am Anfang schon nicht weiter :/

Ich will dem + Operator das Verhalten von * beibringen....

Die Fehlermeldung die ich jedoch erhalten ist:
must have an argument of class or enumerated type

Der Code:

Code:
#include <cstdlib>#include <iostream>


using namespace std;


double operator+ (int a, int b);


int main(int argc, char** argv) {


    int a, b, c;
    
    a = 5;
    b = 10;
    c = 20;
    
    cout << a + b << endl;
    
    return 0;
}


double operator+ (int a, int b) {
    return a*b;
}
 
Der operator funktioniert nur wenn diese Funktion innerhalb einer Klasse deklariert wird und dann eben für Objekte dieser Klasse. Du hast ja nirgends eine Klasse...
 
ok...

ich hatte mich da an einem BSP. von einem Kumpel gehalten - der hatte das ohne Klassen - nun wundere ich mich, wie er das gemacht haben will

Bei Klassen bin ich noch nicht... nun werd ich meine reihenfolge wohl ändern müssen :/
 
Naja wenn du uns das Beispiel nicht zeigst, können wir dazu auch nichts sagen...

hat er vielleicht string verwendet?


Und gleich mal als Tipp: Auch wenn es hier nur um ein Beispiel ging, aber Ziel von Operator-Überladen ist es nicht, erwartetes Verhalten umzubiegen...
 
das bsp. ist leider nur gedruckt :/....

​ja, ich weiß ^^ - ist nur ein lerneffekt :)
 
Naja es reicht ja eine Zeile um zu zeigen, wie der Operator überladen wurde...
 
Mumpitzelchen schrieb:
Der operator funktioniert nur wenn diese Funktion innerhalb einer Klasse deklariert wird und dann eben für Objekte dieser Klasse. Du hast ja nirgends eine Klasse...

Das stimmt nicht ganz. Operatoren können durchaus auch außerhalb einer Klasse definiert werden, aber sie dürfen eben nur für benutzerdefinierte Typen implementiert werden.

EDIT: Ok, das war jetzt selbst nicht ganz korrekt. Wie 1668mib schon sagte, mindestens einer der Operanden muß ein benutzerdefinierter Typ sein.
 
Zuletzt bearbeitet:
Zurück
Oben