operator << mehrdeutig
-
Hi,
wenn ich folgende Klassendeklaration habe:
class Test { public: Test &operator << (unsigned short); Test &operator << (unsigned long); };
und dann das Ganze so verwende:
Test A; A << 25;
Bringt der Compiler die Fehlermeldung:
error C2593: 'Operator <<' ist mehrdeutig
Woran liegt das, zumal das ja bei den STL Streams kein Problem darstellt? Beispielsweise ofstream:
ostream& operator<<(short); ostream& operator<<(unsigned short); ostream& operator<<(int); ostream& operator<<(unsigned int); ostream& operator<<(long); ostream& operator<<(unsigned long);
Danke!
-
25 is unsigned short und unsigned long du musst den compiler klar machen was es nun wirklich ist z.b für short;
25s
-
Das komische ist ja, das der Fehler beispielsweise bei ostream nicht kommt:
ostream T; T << 25; // kein Fehler !
Kann mir jemand erklären, warum der Compiler bei den STL Streamklassen keine Mehrdeutigkeiten sieht?
-
25 ist ein int.
Nun gibt es 2 Funktionen die die gleiche Umwandlung wollen: unsigned short und unsigned long. Sind beide gleich 'leicht' umzuwandeln. Welcher soll der bevorzugen??Bei den C++ Streams gibt es fuer int eine Ueberladung (um genau zu sein fuer alle primitiven Typen) das bedeutet: er braucht keine Konversion, weil int ein perfect match ist.
Bei dir kann er sich nicht entscheiden was besser passt.