Template für lineare Liste von Knoten
-
Deine Hinweise habe ich eigentlich beachtet.
HabeNodePointer n = new NodePointer;
in
NodePointer n = new NodeType;
abgeändert und die main sieht nun so aus:
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; };
-
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 gehabtAnsonsten 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 soListe():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 };