etse Skrevet 10. september 2009 Del Skrevet 10. september 2009 (endret) Hei. Jeg har nå satt meg ned for å lære meg C++, har vært borti en del vanlig C før, og ting blir derfor av og til litt låst i vanlig C løsninger, selv om det ofte skal være det samme. Etter en del feilsøking tror jeg har kommet frem til hva feilen er, men forstår ikke hvorfor den oppstår. Enkelt og greit forklar: Jeg blar gjennom listen til et eller annet punkt og skriver ut elementene til console. Så tar jeg Rewind-funksjonen for å starte på begynnelsen og skrive ut ellementene til et gitt tilfeldig punkt. Det som da skjer er at den skriver ut første tabell og fortsetter der den slapp. Når jeg seg i debuggeren ser jeg enkelt og greit at cur->next peker til det elementet, som i og for seg er logisk siden den går til den etterpå. Jeg forstår ikke hvorfor denne gjør det, når den burde peke på det andre elementet i listen? Jeg regner med at feilen ligger i list.cpp i en av funksjonene som ikek håndterer pekerne ordentlig. Men jeg klarer ikke helt se hvorfor, i debuggeren ser det ut som *First (pekeren som skal peke til første element) peker til riktig element hele tiden, og first->next peker til det andre elementet. List.h struct node { void *item; node *next; }; class List { public: List(); // Constructor ~List(); // Deconstructor int NumItems(); // Returnerer antall elementer void AddFirst(void *item); // Legger en ting til i begynnelsen void Delete(); // Sletter nåværende element void Next(); // Går til neste element void Rewind(); // Går til starten void* GetItem(); // Returnerer "item" private: node *first; node *prev; node *cur; int numitems; }; list.cpp http://pastebin.com/m2bb488a9 Takker for all hjelp som dere kan gi. Og håper på å få løst problemet, men siden dette er noe jeg bare gjør på fritiden er jeg ikke bare ute etter å løse problemet men også forstå HVORFOR det ikke funker slik at jeg slipper fremtidige problemer som dette. Derfor hade jeg blitt veldig glad for en forklaring. Legger ved pastebin av de andre filene tilfelle dere trenger å se de, men regner med disse funker som de skal. deck.cpp og deck.h: http://pastebin.com/m2deab3e0 main.cpp: http://pastebin.com/m7318e444 Endret 3. november 2009 av etse Lenke til kommentar
etse Skrevet 10. september 2009 Forfatter Del Skrevet 10. september 2009 Etter å ha klødd meg mye i hode kom jeg frem til at jeg hadde gjort en veldig elementær feil som skapte mye problemer, så det ble en del omskriving av koden. Siden det kan komme flere som får samme problemet senere skal jeg skrive ned en kort forklaring. Som dere kan se i koden har jeg "Cur", "Prev" og "first" som skal være pekere til første, forrige, og nåværende node i listen. Da disse bare var pekere skapte det problemer sammen med rewind funksjonen som bare sa cur = first. Dette gjorde at de da ville i hovedsak være samme minneblokk, og ikke bare peke på samme element. Dette kunne løses på to forskjellige måter, med å f.eks. enten si cur = *first, eller med andre cur "adressen pekt på i first". Men jeg valgte å gå for en litt annen løsning og lagde helt egne noder for first, cur og prev. Og bruke "->next" til å holde elementetj eg pekte på. Når jeg da skulle hente ut en ting fra listen bruker jeg cur->next->item. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå