Probleme mit verketteten Listen...schon beim Anfang!



  • Hallo,

    ich habe gerade angafangen mich verketteten Listen zu beschäftigen, doch leider stoße ich schin am Anfang auf ein (für mich) unlösbares Problem:

    Ich habe den Quelltext 1:1 aus einem Tutourial abgeschrieben, doch ich erhalte immer folgende Fehlermeldung, mit der ich nichts anfangen kann:

    Liste.cpp(18) : error C2440: '=' : 'void *' kann nicht in 'struct evListe ' konvertiert werden
    Konvertierung von 'void
    ' in Zeiger auf nicht-'void' erfordert eine explizite Typumwandlung
    Fehler beim Ausführen von cl.exe.



  • Ich habe den Quelltext 1:1 aus einem Tutourial abgeschrieben

    Dann mal her mit deinem Quelltext.

    MfG



  • Hallo,

    habe deinen 2ten Beitrag zu spät gesehen.

    Liste = (evListe*) malloc (sizeof(struct evListe));
    

    Bei malloc musst du noch 'casten';

    Liste = new evListe;
    

    geht auch.

    MfG



  • Danke für deine Antwort!

    Gibts denn noch eine andere möglichkeit außer "malloc"?
    Damit hab ich noch nie gearbeitet...
    Was bewirkt denn das "casten"?

    Ich weiß, viele Fragen...wahrscheinlich auch nicht sehr Anspruchsvoll...aber aller Anfang ist schwer 🙂

    MfG

    Sebastian



  • sebbelchen II schrieb:

    Gibts denn noch eine andere möglichkeit außer "malloc"?
    Damit hab ich noch nie gearbeitet...

    Der new-Operator wurde schon genannt. malloc ist eine Funktion der C-Standardlibrary, die wegen der Kompatibilität noch in C++ enthalten ist. malloc sollte aber im Normalfall nicht benutzt werden.

    Wenn dir new allerdings auch nichts sagt, solltest du das erstmal nacharbeiten, bevor du dich wieder den Listen zuwendest.

    Was bewirkt denn das "casten"?

    Ein Cast ist eine explizite Typumwandlung. malloc gibt einen Zeiger auf void (also einen generischen Zeiger) zurück. In C++ kann jedoch ein void-Zeiger (im Unterschied zu C) nicht automatisch in einen Zeiger auf einen anderen Typ umgewandelt werden. Also muss ein Cast her.

    evListe* Liste = static_cast<evListe*>(malloc(sizeof evListe));
    
    // oder traditionell im C-Stil:
    // evListe* Liste = (evListe*)malloc(sizeof evListe);
    


  • evListe* Liste = ( evListe* ) malloc( sizeof( evListe ) );
    

    sollte für den anfang genügen^^


Anmelden zum Antworten