Liste, Pointer problem
-
du kommst wohl aus C:
Das typedef ist absolut überflüssig. Setz dich mit Klassen auseinander!!! Das was in deinem main steht übernehmen Member-Funktionen. Tutorials gibts doch genügend
-
hm, ist er nicht verständlich?
okay ich versuchs:
#include <iostream> using namespace std; typedef struct mystr mystr; struct mystr { mystr* next; // next element int a; // value }; int main() { mystr* erstes; // points at first element mystr* letztes; // points at last element mystr a; // first element a.a = 0; // gets some value erstes = &a; // erstes points at a letztes = &a; // letztes points at a for(int i=0; i<5; i++) // do 5 times { mystr c; // create a new c c.a = i; // give it some value letztes->next = &c; // set the pointer in the element onto the created element letztes = &c; // let letztes point at just created element } for(int i=0; i<5; i++) // do 5 times { printf("%d\n", erstes->a); // print value of the element, erstes points at erstes = erstes->next; // erstes points at the next element } return 0; // end }Die3? schrieb:
du kommst wohl aus C:
Das typedef ist absolut überflüssig. Setz dich mit Klassen auseinander!!! Das was in deinem main steht übernehmen Member-Funktionen. Tutorials gibts doch genügend
mir ist klar dass ich einfach ne Liste aus der STL verwenden könnte, bin vor kurzem von java nach c++ gewechselt, und wollte das pointer zeugs verstehn. Darum ist es mir wichtig zu verstehen warum das beispiel nicht funktioniert.
gruß
eurohasi
-
Kommentare auf Denglish das is ja richtig Geil
Was is eigentlich dieses
erstes->a
-
naja, erstes zeigt doch aufn element, also is erstes->a, der wert a von dem element, !?
-
Deklaration:
int *ptr;Initialisierung
ptr = &var;
-
Das in Zeile 25 erzeugte Objekt wird am Ende des Blocks (Zeile 29) automatisch zerstört und freigegeben - jeder Zeiger, der auf dieses Objekt zeigte, ist damit automatisch ungültig.
-
camper schrieb:
Das in Zeile 25 erzeugte Objekt wird am Ende des Blocks (Zeile 29) automatisch zerstört und freigegeben - jeder Zeiger, der auf dieses Objekt zeigte, ist damit automatisch ungültig.
okay, ich verstehe, klar^^.
wie kann ich das umgehn?
-
Erzeuge das Objekt außerhalb des Blocks zB oben mit a
-
okay, habs geschafft, danke, es war wirklich der fehler dass das object c ja nur daseinsberechtigung hat in seinem Block,
hab das problem mal so gelöst. Es leistet das gewünschte.
#include <iostream> using namespace std; class myclass { public: myclass* next; // next element int a; // value myclass(int val) { a = val; } void add(int val) { next = new myclass(val); } }; int main() { myclass *erstes; myclass *letztes; myclass* a = new myclass(0); erstes = a; letztes = a; for(int i=0; i<5; i++) { letztes->add(i); letztes = letztes->next; } for(int i=0; i<5; i++) { printf("%d\n", erstes->a); erstes = erstes->next; } int lo; cin >> lo; return 0; }danke gary für die hilfe

gruß
eurohasi
-
ich würd aber noch im ctor den "next" zeiger auf null setzen, um das ende der liste zu markieren.
da wir die länge der liste meist nicht vorher kennen (sonst würde man ein array verwenden) kann man die null als abbruchbedingung benutzen
while (erstes) { printf("%d\n", erstes->a); erstes = erstes->next; }
-
anstatt
int lo; cin >> lo;kannst du
fflush(stdin); getchar();verwenden
-
gary1195 schrieb:
anstatt
int lo; cin >> lo;kannst du besser
fflush(stdin); getchar();verwenden
LOL
-
@ gary1195:
Wir sind immer noch im C++-Forum. Von daher wäre es vielleicht vorteilhaft, den Threadersteller nicht zusätzlich zu verunsichern...
(Im Übrigen hat auchprintf()hier nichts zu suchen.)@ eurohasi:
Hier gibts einen Artikel über Zeiger. Es lohnt sich sicher, den durchzulesen, Zeiger werden dort sehr gut erläutert.