Verkette Liste



  • Hey Leute,
    ich hab heute aus übungszwecken ( da ich das mit den verketteten listen noch nicht wirklich verstehe^^) aus einem beispielscript ( doppeltverkette liste) eine einfachverkettete liste nachzuprogrammieren. Naja dabei sind wie mans sich denken konnte aber fehler aufgetreten 😃

    26 C:\Users\Fredi\Desktop\Projekte\Datenbank\main.cpp new types may not be defined in a return type

    und

    26 C:\Users\Fredi\Desktop\Projekte\Datenbank\main.cpp return type specification for constructor invalid

    Und dann hier noch mein code:

    #include <cstdlib>
    #include <iostream>
    #include <fstream.h>
    #include <string>
    #include <stdlib.h>
    
    using namespace std;
    
    class Knoten
    {
      public:
                Knoten(void);
                Knoten (int Alter); 
                ~Knoten(); 
     //Methoden 
                void SetzteAlter(int Alter); 
                void SetzteNachfolger(Knoten* Nachfolger); 
                Knoten* HoleNachfolger(void); 
                void Ausgabe(void); 
      private: 
                int m_Alter; 
                Knoten* m_Nachfolger;             
    }
    
    Knoten::Knoten(void) 
    {  
        m_Nachfolger = NULL; 
        m_Alter = 0; 
    } 
    
    Knoten::Knoten(int Alter) 
    {  
        m_Nachfolger = NULL; 
        m_Alter = Alter; 
    } 
    
    Knoten::~Knoten() 
    { 
    
    } 
    
    void Knoten::SetzteAlter(int Alter) 
    { 
        m_Alter = Alter; 
    }  
    
    void Knoten::SetzteNachfolger(Knoten* Nachfolger) 
    { 
        m_Nachfolger=Nachfolger; 
    } 
    
    Knoten* Knoten::HoleNachfolger(void) 
    { 
        return m_Nachfolger; 
    }  
    
    void Knoten::Ausgabe(void) 
    { 
        cout<< m_Alter << endl; 
    } 
    
    class Liste 
    { 
    public: 
        Liste(void); //Konstruktor 
        ~Liste(void); //Destruktor 
    
        void Hinzufuegen(Knoten* NeuerKnoten); 
        void Ausgeben(void); 
        void Loeschen(void); 
    
    private: 
        Knoten* ListenAnfang; 
        Knoten* ListenEnde; 
    }; 
    
    //Die Zeiger ListenAnfang und ListenEnde mit NULL initialisieren 
    
    Liste::Liste(void) 
    { 
        ListenEnde=ListenAnfang=NULL; 
    } 
    
    //Alle Knoten der Liste löschen, wenn die Liste gelöscht wird 
    
    //Knoten in die Liste einfügen 
    void Liste::Hinzufuegen(Knoten* NeuerKnoten) 
    
    { 
        if(ListenAnfang==NULL) 
        { 
            ListenAnfang=NeuerKnoten; 
            ListenEnde=NeuerKnoten; 
        }
        else 
        { 
            ListenEnde -> SetzteNachfolger(NeuerKnoten); 
            ListenEnde = NeuerKnoten; 
        } 
    } 
    
    void Liste::Ausgeben() 
    { 
        Knoten* p=ListenAnfang; 
    
        //solange p nicht NULL ist 
        while(p) 
        { 
            //Ausgeben der Attribute 
            p -> Ausgabe(); 
            //und p wird auf den NachfolgeKoten von p gesetzt 
            p = p -> HoleNachfolger(); 
        } 
    } 
    
    //Demostration der Listenfunktionalität 
    
    int main(void) 
    { 
        Liste DieListe;        //Liste instanzieren 
    
        //einen neunen Knoten erzeugen 
        Knoten* k = new Knoten(12); 
        //den Knoten einfügen 
        DieListe.Hinzufuegen(k); 
    
        //Noch einen Knoten erzeugen, diesmal noch ohne Inhalt 
        k = new Knoten(); 
    
        //den Knoten Werte zuweisen 
        k->SetzteAlter(32);  
    
        //ebenfalls einfügen 
        DieListe.Hinzufuegen(k); 
    
        //das Eingegebene ausgeben 
        DieListe.Ausgeben(); 
    
        return 0; 
    }
    

    Könnte mir da vll jemand sagen wo der fehler liegt vll. besser noch den Fehler etwas erklären ? 😃

    mfg friedrich


  • Mod

    Es fehlt ein Semikolon am Ende der Definition von Knoten.



  • Da feht ein Semikolon bei der Klasse Knoten und der Destruktor fehlt, müsste noch sowas rein:

    Liste::~Liste(void)
    {
    
    }
    

    Das void lässt man in C++ als Parameter normalerweise weg.



  • mmh wenn ich nach

    class Knoten
    

    das semikolon setze kommt nur

    10 C:\Users\Fredi\Desktop\Projekte\Datenbank\main.cpp expected unqualified-id before '{' token

    noch dazu



  • class Knoten 
    { 
      public: 
                Knoten(void); 
                Knoten (int Alter); 
                ~Knoten(); 
     //Methoden 
                void SetzteAlter(int Alter); 
                void SetzteNachfolger(Knoten* Nachfolger); 
                Knoten* HoleNachfolger(void); 
                void Ausgabe(void); 
      private: 
                int m_Alter; 
                Knoten* m_Nachfolger;             
    }; // Hier kommt das Semikolon hin
    


  • ahh vielen dank euch hat geklappt 🙂

    hab ich mich am ende auch noch doof angestellt und das semikolon falsch gesetzt 😃



  • Wenn ich dir mal ein paar Ratschläge geben darf:
    1.) Diese Liste ist ziemlich "C-like", heißt, der Benutzer muss mit vielen Zeigern + mit new hantieren. Mach doch Funktionen, mit denen man die Daten direkt einfügen kann, als dass man sich zuerst Knoten erzeugen muss.
    2.) An deiner Stelle würde ich die Daten (Alter) vom Knoten trennen. Mach jeweils eine eigene Klasse, dann kannst du auch Listen von anderen Typen machen.
    3.) Für das Ausgeben würde ich den Stream-Operator überladen. Dann kannst du die Daten auch problemlos in z.B. Dateien schreiben.

    Du kannst dir ja mal std::list ansehen und versuchen, dich ein bisschen daran zu orientieren. Muss ja nicht gleich ein Template mit Allokator und Iteratoren sein.



  • Wozu bindest du <cstdlib> UND das (nicht standardkonforme) <stdlib.h> ein? Eins von beiden reicht.


Anmelden zum Antworten