Anfängerfrage: Eigene Liste
-
Hallo, ich habe versuch eine eigene Liste zu programmieren, aufgrund meiner eher geringen C++ Kenntnisse habe ich nur eine "int-Liste" erstellt, aber auch die liefert noch fünf Fehler und eine Warnung (Compiler: VC++).
Datei list.h:namespace Listen { class int_LE { private: int_LE* next; int_LE* prev; int value; int_List list; public: int* show() { return &value; } int_LE(int newvalue) { value = newvalue; } int_LE() { } inline ~int_LE() { } int_LE* renext() { return next: } int_LE* reprev() { return prev; } int_List relist() { return list; } }; class int_List { private: int_LE* first; int_LE* last; int anzahl; public: int_List() { first = 0; last = 0; anzahl = 0; } virtual ~int_List(void) { while (anzahl > 0) { pop(); } } int_LE* refirst() { return first; } int_LE* relast() { return last; } int reanz() { return anzahl; } bool append(int_LE element) { last.renext() = &element; element.reprev() = &last; last = &element; element.relist() = &this; element.renext() = 0; ++anzahl; return true; } int_LE pop() { int_LE* hallo; hallo = last; last = last.reprev(); last.renext() = 0; hallo.reprev() = 0; hallo.relist() = 0; --anzahl; return hallo; } }; }
Datei Test.cpp
#include "list.h" #include <iostream> using namespace Listen; void main() { int_List Ansgar; int_LE Bernhard(9); int_LE Bern; if (Ansgar.append(Bernhard)) { std::cout << "Bernhard appended!"<<std::endl; Bern = Ansgar.pop(); std::cout << Bern.show()<<std::endl; } else { std::cout << "geht nicht!"<<std::endl; } }
thx
Glamdring
-
Was ist deine Frage?
-
Oh, mmmmhh ja, das hab ich vergessen:
Die Fehler:
error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'list'
error C2501: 'int_List' : Fehlende Speicherklasse oder Typbezeichner
error C2501: 'list' : Fehlende Speicherklasse oder Typbezeichner
error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'relist'
error C2501: 'int_List' : Fehlende Speicherklasse oder Typbezeichner
warning C4183: 'relist': Definition der Member-Funktion sieht aus wie ctor, aber der Name entspricht nicht der umschliessenden KlasseWarum kommen die Fehler, ist doch (meiner Meinung nach) alles richtig
thx
Glamdring
-
Müssen Inline-Methoden nicht mit einem ; abgeschlossen werden?
-
Deiner Klasse int_LE ist int_List noch unbekannt.
Mach 2 hpp's und include int_List in int_LE.Jockel
-
inline: Habs im Code geändert, kein neuer Fehler, kein alter weck.
Jockelx: Danke, ich versuchs.Gruß
Glamdring
-
Der Compiler kennt eben int_List an der Stelle, wo du es zum ersten mal verwendest, nicht. Woher auch? Die Klasse steht ja erst unten drunter.
BTW: Warum sollte ein Listenelement eine Liste enthalten? Was ist der Sinn dahinter?
-
AJ schrieb:
Müssen Inline-Methoden nicht mit einem ; abgeschlossen werden?
nein
-
Ich bekomm n0ch folgende Fehler:
warning C4182: Die #include-Verschachtelungsebene ist 363 tief; Endlosschleife moeglich
fatal error C1076: Compiler-Beschraenkung: Interne Heap-Grenze erreicht; Verwenden Sie /Zm, um eine hoehere Grenze anzugebenWarum???
-
include guards vergessen?
-
Glamdring schrieb:
int_LE pop() { int_LE* hallo; //... return hallo; }
Mich wundert ein wenig, das dies ohne Fehler arbeitet. Die Funktion pop() sollte ja eigentlich ein int_LE-Wert zurückliefern, du gibst aber einen Zeiger zurück.
Meines Erachtens nach müsste es richtig heissen:return *hallo;