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.


Anmelden zum Antworten