Konvertierung zwischen Pointern zweier Typen



  • Ich versuche momentan implizite und explizite Konvertierungen zwischen Datentypen zu verstehen. Im Beispiel versuche ich den Typ "Test" implizit und explizit in Integer umzuwandeln. Das funktioniert auch, solange ich keine Pointer verwende (siehe Z. 20).

    Wenn ich jetzt aber versuche, einen Test-Pointer in einen Integer-Pointer umzuwandeln, dann schmeißt der Compiler aber einen Fehler:

    invalid static_cast from type 'Test' to type 'int'**

    #include <iostream>
    
    class Test {
    public:
        int val;
        Test(int i) : val(i) {}
    
        operator int() { return val; }
    };
    
    int main(int argc, char** argv) {
    
    // none of this works
    Test* t = new Test(55);
    int* ip1 = static_cast<int*>(t);
    int* ip2 = t;
    
    // works
    //	Test t(55);
    //	int i(t);
    
    return 0;
    }
    

    Die Frage ist jetzt, warum funktioniert da nicht und wie kann man ggfs. implementieren?

    Danke!



  • Dafür benötigt man reinterpret_cast<T>(x): reinterpret_cast in C++ | Type Casting operators

    static_cast<T>(x) erlaubt nur Datenkonvertierungen zwischen nativen Datentypen oder aber Konvertierung von Zeigern nach void*: static_cast in C++ | Type Casting operators (dein Fehler wird auch dort beschrieben).


Log in to reply