Operatorenüberladungsproblem...
-
Hi,
bool operator> (const DQL& dql); bool operator==(const DQL& dql); DQL operator- (const DQL& dql); DQL& operator= (const std::string& str); DQL& operator= (const unsigned long l[8]); DQL& operator= (unsigned long l); bool operator< (const DQL& dql) { if(dql > (*this)) // Zeile X return true; return false; }
Visual C++ Compiler schrieb:
dql.h(X) : error C2678: Binaerer Operator '>' : Kein Operator definiert, der einen linksseitigen Operator vom Typ 'const class DQL' akzeptiert (oder keine geeignete Konvertierung moeglich)
Nun steht der Prototyp dazu ja jetzt oben drüber, was habe ich falsch gemacht?
Danke im Voraus,
MfG MAV
-
wenn du deine operatoren schon als member definierst, mach sie auch const.
denn eine nicht konstante elementfunktion (operator>) kannst du nicht auf ein als konstante referenz übergebenes objekt (dhl in operator<) aufrufen.
idR macht man solceh operatoren, wie die du da zeigst, nicht zu membern, sondern lässt sie global (uU friends).
-
ein zeichen dafür das man bool nicht verstanden hat
bool operator< (const DQL& dql) { if(dql > (*this)) // Zeile X return true; return false; }
bool operator< (const DQL& dql) { return dql > *this; }
-
OK, ich verstehe, ist ja auch klar...
-
DQL& operator= (const unsigned long (&l)[8]);
Finde ich da schöner - das ist dann eine Referenz auf ein passendes Array, anstatt ein Zeiger auf ein Array, dessen Größe (zumindest in VC7.1?) überhaupt nicht geprüft wird.