Problem mit einach verketteter Liste..
-
Vielen Dank für die Zeit
Die Ausgabe ist schon deutlich besser :
D:\__UNI\..\test>g++ list.cpp
list.cpp: In constructor 'ListElem<T>::ListElem(T*)':
list.cpp:5:16: error: 'NULL' was not declared in this scopeVon Template stand da nix aber freu mich schonmal, dass es nicht nur am restlichen Code lag..
Dass man NULL deklarieren soll ist mir nun aber wirklich neu, manche Fehler muss man erst noch verstehen lernen...
-
Das ist merkwuerdig. Was fuer einen Compiler nutzt du? NULL muesste eigentlich vom Preprocessor bereits verarbeitet werden. Alternativ geht auch
next = 0;
-
icarus2 schrieb:
Das ist merkwuerdig. Was fuer einen Compiler nutzt du? NULL muesste eigentlich vom Preprocessor bereits verarbeitet werden.
Dafür braucht man aber cstddef.
-
0 habe ich auch ausprobiert aber funktioniert auch nicht.
Nutze minGw (ich verzweifel da manchmal drann wenn es bessere gibt freue ich mich über jeden Tipp) - Wollte es jetzt vermeiden Studio zu nehmen, weil das mir so viele Daten in die Projektordner donnert, die ich weder verstehe noch nutzen kann.
Außerdem war ich der Meinung auf dem Holzweg anzufangen..
Auto fahren sollte man auch nicht gleich im Porsche lernenD:\__UNI\..\test>g++ list.cpp
c:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../../libmingw32.a(main.o): In fu
main': C:\\MinGW\\msys\\1.0\\src\\mingwrt/../mingw/main.c:73: undefined reference to
n@16'
collect2: ld returned 1 exit statusUnverständlich einfach...
-
SeppJ schrieb:
icarus2 schrieb:
Das ist merkwuerdig. Was fuer einen Compiler nutzt du? NULL muesste eigentlich vom Preprocessor bereits verarbeitet werden.
Dafür braucht man aber cstddef.
Habe ich eben versucht aber ich glaube diese Datei nicht zu besitzen :
D:\__UNI\..\test>g++ list.cpp
In file included from list.cpp:2:0:
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/stddef.h:150:1: error: template de
claration of 'typedef'
list.cpp:5:15: error: expected ')' before '*' token
list.cpp:10:5: error: 'T' does not name a type
list.cpp:15:5: error: 'T' does not name a type
-
Zeig mal deinen Code. Mit Templates produzieren Anfänger häufig unerwartete Linkerfehler, wenn sie herumspielen. Da hilft dir auch ein Compilerwechsel von normalem Auto auf Bundesautobahn hin zu Auto mit Zündschloss links und Kofferraum vorne auf Mautstraße nicht.
P.S.: Meine Fahrschule hatte einen Porsche.
-
@SeppJ:
Das wusste ich nicht. Wird der in MS VS automatisch eingebunden? Hat bei mir immer gelappt ohne explizites einbinden.@ffm439:
Warum heisst dein File main.c? Das waere dann wohl C und nicht C++.
Poste doch mal deinen aktuellen Code.
-
Ja.. ok
Bin jetzt hier :template<typename T> #include <stddef.h> class ListElem { public: ListElem(T* d) { next = 0; data = d; } T* getData() { return data; } void setNext (ListElem *n) { next = n; } ListElem* getNext() { return next; } private: T* data; ListElem* next; };
-
ffm439 schrieb:
SeppJ schrieb:
icarus2 schrieb:
Das ist merkwuerdig. Was fuer einen Compiler nutzt du? NULL muesste eigentlich vom Preprocessor bereits verarbeitet werden.
Dafür braucht man aber cstddef.
Habe ich eben versucht aber ich glaube diese Datei nicht zu besitzen :
D:\__UNI\..\test>g++ list.cpp
In file included from list.cpp:2:0:
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/stddef.h:150:1: error: template de
claration of 'typedef'
list.cpp:5:15: error: expected ')' before '*' token
list.cpp:10:5: error: 'T' does not name a type
list.cpp:15:5: error: 'T' does not name a typeWTF? Du solltest ganz dringend mal deinen Code zeigen. Mir schwant übles. Hast du das Include zufällig in der Klasse stehen?
edit: Ja hast du. Was soll der Unsinn denn? Wenn du nicht weißt, was template ist und tut, dann informier dich doch erst einmal.
-
So bindet man ein hab ich gelernt
(shit...^^)
Ich hab es ja nur auf den Hinweis, es würde fehlen dahin geschrieben, ab Werk hatte ich das nicht.
-
icarus2 schrieb:
@SeppJ:
Das wusste ich nicht. Wird der in MS VS automatisch eingebunden? Hat bei mir immer gelappt ohne explizites einbinden.Das wird vermutlich indirekt durch andere Header eingebunden. Beim GCC auf dem mingw basiert hat man sich viel Mühe gegeben, Headerabhängigkeiten klein zu halten und mit jeder Version fliegen immer mehr raus. Bei VS ist das nicht so die Priorität. Aber man kann sich nicht da drauf verlassen, daher immer das einbinden, was man braucht.
-
Das template <typename T> gehört zu Klasse, du hast hier also das Eingebundene mitten in eine Klassendefinition gestopft. Mach es davor, dann stimmts.
-
Vielen Dank !
Das klappt jetzt schonmal ohne Fehlerendlich ^^
Wäre im Leben nicht auf dieses template gekommen.
Das kommt in keinster Weise vor in den Vorlesungen, alles sehr theoretisch aber so ist es halt ..Werde mich dann mal an die weiteren Möglichkeiten der Listen machen, das sollte ja jetzt dank des funktionsfähigen Grundprinzipes eher laufen, denn theoretisch haben wir das je gelernt die Tage
Danke für die kompetente Hilfe
Darauf kann ich jetzt aufbauen.. so gut es geht ^^#include <stddef.h> template<typename T> class ListElem { public: ListElem(T* d) { next = 0; data = d; } T* getData() { return data; } void setNext (ListElem *n) { next = n; } ListElem* getNext() { return next; } private: T* data; ListElem* next; }; int main() { }
Gibt leider noch keine Ausgaben, mein Ziel wäre es dann Elemente hinzuzufügen und zu löschen..
Danke nochmal und bis wahrscheinlich bald mal
-
kein wunder, dass du keine ausgabe bekommst. du gibst ja auch nichts aus
hier mal ein einfaches grundgerüst:
#include <cassert> template < typename T > class my_list { struct node { node* next; T value; node(const T& value, node* next) : value(value), next(next) {} }; node* first; public: my_list() : first(0) {} ~my_list() { clear(); } void push_front(const T& value) { if(first == 0) { first = new node(value, 0); } node* to_add = new node(value, first); first = to_add; }; T front() const { assert(!empty()); return first->value; } void pop_front() { assert(!empty()); node* to_del = first; first = first->next; delete to_del; } bool empty() const { return first == 0; } void clear() { while(!emtpy()) pop_front(); } }; #include <iostream> int main() { my_list<int> liste; liste.push_front(12); liste.push_front(1); std::cout << liste.front() << std::endl; liste.pop_front(); std::cout << liste.front() << std::endl; }
bb