Ab VC++ version 4.0 darf sowas nicht mehr geschrieben werden: func(&car); wie sonst???



  • hallo.
    ich habe VC++6.0
    habe eine structur erstellt:

    typedef struct CAR
    {
    float mass;
    float speed;
    }CAR;
    

    so dann habe ich ne funktion geschrieben

    void input (CAR *car)
    {
    car->mass*3.0f;
    }
    

    so dann wollte ich die funktion aufrufen

    CAR *car;
    input(&car);
    

    dann kommt folgende fehlermedlung
    C:\Programme\Microsoft Visual Studio\MyProjects\Mini_Car_Race\Game.cpp(528) : error C2664: 'input' : Konvertierung des Parameters 1 von 'struct CAR ** ' in 'struct CAR *' nicht moeglich
    Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    dann habe ich in der msdn nach dem fehlercode gesucht und was gefunden da stand das mann sowas (

    func(&var);
    

    ) ab der version 4.0 nicht mehr machen darf. 😡
    wie soll ich es denn jetzt machen???
    bitte helft mir.
    MFG
    DANKE 🤡



  • Klar geht das 😉

    CAR *car;
    

    Was deklarierst du denn hier? Einen Zeiger auf eine CAR Struktur.

    input(&car);
    

    Eine Zeile weiter unten: Du übergibst der Funktion die Speicheradresse des uninitialisierten Zeigers (d.h. er zeigt auf irgendeinen Speicherbereich (du hast ihn weder auf NULL gesetzt noch mit new einen Speicherbereich zugeordnet)).
    Mal abgesehen, dass der Zeiger nicht initialisiert wurde: Der Punkt ist, dass du also einen Zeiger auf einen Zeiger übergibst.

    Folgender Code klappt:

    CAR *car;
    car = new CAR;
    input(car);
    delete car;
    

    oder

    CAR car;
    input(&car);
    

    oder

    void input (CAR **car)
    {
    (*car)->mass*3.0f;
    } 
    
    // und dann
    CAR *car;
    input(&car);
    

    Grüße Rapha



  • Liebe Frau Bola,

    CAR car;
    func(&car);

    und damit die Frau Bola nicht dumm bleibt:

    Die Funktion erwartet, laut deklaration einen "Zeiger auf CAR".

    nun ist aber mit "car" bereits ein "Zeiger auf CAR", somit wäre &car ein "Zeiger auf enen Zeiger auf car". Was etwas ganz anderes ist.

    VC4 hat hier eine (sicherlich nichtstandardisierte) Ausnahme gemacht.

    MFG, Ihr


Anmelden zum Antworten