Seltsames Problem beim Konvertieren von int zu unsigned int (Visual C++)



  • Ich schreib mal in dieses Forum, auch wenn es vielleicht compilerspezifisch ist:
    Ich benutze den Visual C++ 2008 Express compiler (und kann im Moment keine anderen testen).
    Ich habe folgendes Klassendesign:

    template<unsigned int N>
    class A
    {
       A();
       A(const A&);
       A(unsigned int);
    
       A& operator=(const A&);
       A& operator=(unsigned int);
    };
    

    Jetzt habe ich diesen Code geschrieben:

    A<X> a = 1; //kompiliert
    
    A<X> a = 0; //error C2440: 'Initialisierung': 'int' kann nicht in 'A<N>' konvertiert werden.
                //Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig
    
    A<X> a = 0u; //kompiliert
    

    Warum kompiliert das mit '1' aber nicht mit '0'? Obwohl beides doch int ist?
    Kein Konstruktor ist explicit. Warum sollte es dann Probleme bei der Konvertierung von int zu unsigned int geben? Hat das literal 0 eine besondere Bedeutung oder ist das eine Eigenheit vom Microsoft Compiler?



  • GCC-4.4.3 beschwert sich nicht.



  • Fehler gefunden. Wie dumm von mir Oo
    Habe folgenden Konstruktor noch als Überbleibsel in meiner Klasse übersehen:

    A(const unsigned int * p){}
    

    Das heißt der Compiler konnte sich nicht zwischen der Zahl 0 und nem NULL-Pointer entscheiden


Anmelden zum Antworten