Template für lineare Liste von Knoten



  • temp und current in irgendwelchen Methoden sind als NodePointer* ausgewiesen, sollten aber NodePointer sein. Aber das hatten wir schon n paar mal 🙄



  • Es funktioniert jetzt alles, ausser in der anzeigen()-methode.
    es gibt eine access violation in:

    cout << current->data <<endl;
    


  • template <class T>
    struct Node
    {
        Node () : next (0) {}
        // Rest wie gehabt
    

    Ansonsten hat next nirgendwo den Wert NULL bzw. 0 (wie der C++ler tut).



  • Also ich habe keine Ahnung, wo das Zeigerproblem liegt. Werde ich mich mit dem zufrieden geben, was ich jetzt habe. Trotzdem danke nochmal .filmor für die Hilfe.



  • Hab's mir überlegt und gebe mich nicht zufrieden, so kurz vor dem Ziel aufzugeben 😮 . Bin also für jegliche Hilfe, die zur Lösung beihilft, sehr dankbar.
    Zur Übersicht gebe ich nochmal den gesamten Quelltext an:

    #include <iostream.h>
    #include <conio.h>
    #include <string.h>
    
    template <typename T> struct Node
    {
    	Node() : next (0) {};
    	T data;
        Node* next;
    };
    
    template <typename T> class Liste
    {
    	public:
    		typedef T Type;
    		typedef Node<Type> NodeType;
    		typedef NodeType* NodePointer;
            NodePointer first;
    
        void einfuegen(const T& wert)
    	{
    		NodePointer n = new NodeType;
    		n->data = wert;
    		n->next = first;
    		first = n;
    	}
    
    	void loeschen()
    	{
    		NodePointer temp = first;
    		first= first->next;
    		delete temp;
    	}
    
    	void anzeigen()
    	{
    		NodePointer current = first;
    		while(current != NULL)
    		{
    			cout << current->data <<endl;
    			current = current->next;
    		}
    	}
    };
    
    int main()
    {
        Liste<float> lst;
    	lst.einfuegen(1.5f);
    	lst.einfuegen(4.3f);
    	lst.einfuegen(3.1f);
    	lst.anzeigen();
    
        lst.loeschen();
    	lst.anzeigen();
    
        return 0;
    	getch();
    };
    


  • Die Klasse List braucht auch einen constructor denn sonst ist first nicht initialisiert. Nach dem einfügen des ersten nodes zeigt dann sein next pointer ins Nirvana.

    Kurt



  • Meinst du so?

    //...
    	Liste()
    	{
    	    first=NULL;
    	}
             //...
    


  • Jo
    oder so

    Liste():first(0) {
    }
    

    Kurt



  • Konstruktor initialisiert nun first. Nur die Fehlermeldungen werden immer kryptischer. Hat das immernoch was mit dem Zeiger zu tun?

    "ntdll.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
    "C:\WINDOWS\system32\kernel32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
    "C:\WINDOWS\system32\user32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
    "C:\WINDOWS\system32\gdi32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
    "C:\WINDOWS\system32\uxtheme.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
    "C:\WINDOWS\system32\msvcrt.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
    "C:\WINDOWS\system32\advapi32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
    "C:\WINDOWS\system32\rpcrt4.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
    "C:\WINDOWS\system32\msctf.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
    "C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9\comctl32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
    "C:\WINDOWS\system32\shlwapi.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
    "C:\WINDOWS\system32\oleaut32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
    "C:\WINDOWS\system32\ole32.dll" wurde geladen. Es wurden keine entsprechenden Symbolinformationen gefunden.
    Thread 0x11C wurde mit Code 0 (0x0) beendet.
    Das Programm "C:\Programme\Microsoft Visual Studio\MSDev98\MyProjects\test3\Debug\2.exe" wurde mit Code 0 (0x0) beendet.



  • Wo siehst du da eine Fehlermeldung ?
    K.



  • Das sind keine Fehlermeldungen, sondern die üblichen Debug-Ausgaben der eingebundenen Bibliotheken - eigentlich sollte sich parallel zu diesen Ausgaben dein Konsolenfenster geöffnet haben und ein paar Ausgaben ausspucken.

    PS: Ich würde ja noch den Node-Konstruktor etwas erweitern:

    template<typename T>
    struct Node
    {
      Node(const T& wert,Node* n=0):data(wert),next(n){}
      //Rest wie bisher
    };
    
    template<typename T>
    class Liste
    {
    public:
      void einfuegen(const T& wert)
      {
        NodePointer temp=new NodeType(wert,first);
        first=temp;
      }
      //Rest wie bisher
    };
    

Anmelden zum Antworten