Grimnar_ Skrevet 7. oktober 2006 Del Skrevet 7. oktober 2006 Sliter litt (les mye) med å få en lenka liste med klasser (egne filer). Jeg skal skrive f.eks. ett og ett tall til en liste som senere skal skrives ut. Står helt fast her! Lenke til kommentar
Dead_Rabbit Skrevet 7. oktober 2006 Del Skrevet 7. oktober 2006 Hei og velkommen til forumet. Paste koden til det du allerede har skrevet, og ta med eventuelle feilmeldinger du får når du kompilerer, så blir det lettere å hjelpe deg, Lenke til kommentar
Grimnar_ Skrevet 7. oktober 2006 Forfatter Del Skrevet 7. oktober 2006 Problemet er at jeg ikke vet hva jeg skal gjøre: Skal prøve å lese inn en og en x av typen int. Men som dere kanskje ser er jeg ganske lost. "Node.h" #pragma once class Node { public: int x; Node(int); ~Node(void); private: Node *NextNode; }; Node.cpp #include "Node.h" Node::Node(int x) { this->x = x; } Node::~Node(void) { } main.cpp #include <iostream> #include <string> using namespace std; #include "Node.h" void main(void) { int input = 0; int Ant = 0; while(true) { //Her skal jeg vel da opprette en node?? cout << "Starter innlesing X" << (Ant+1) << endl; cin >> input; Ant++; } } Lenke til kommentar
Giddion Skrevet 8. oktober 2006 Del Skrevet 8. oktober 2006 Er det noe slik du prøver å lage, jeg har ikke prøvd det ut, men det burde fungere . Koden er sikkert ikke den beste, men det er jo ganske seint på natta så.. Et lite tips, hvis du er helt lost burde du heller prøve noe enklere eller så kan du bare bruke std::list (#include <list>) #include "Node.h" int main { Node BaseNode;//Base noden som skal være starten på listen Node* pLastNode = &BaseNode;//peker til den forige noden(skal holde styr på hvor vi er i listen) for(int i = 0; i < 100; i++) { // her kan man lese inn x eller bare bruke i som jeg har Node* CurrentNode = new Node(i); //allokerer en nye Node dynamisk pLastNode->NextNode = CurrentNode; //legger til CurrentNode son et ledd i linked list til pLastNode pLastNode = CurrentNode;// setter den nye Noden(CurrentNode) som pLastNode. } // delete på alle nodene hvis ikke har man en memory leak } Lenke til kommentar
Dead_Rabbit Skrevet 8. oktober 2006 Del Skrevet 8. oktober 2006 (endret) En linket liste er rett og slett en struktur som inneholder en verdi, og en peker, slik som du har laget: struct Node { int value; Node* next; }; first.value = 10; first.next = &second; second.value = 11; second.next = &third; third.value = 12; third.next = 0; Denne teknikken kan du da implementere i en klasse: class LinkedList { public: void push(int); //.... private: Node* head; }; Dette bør være nok til å få deg på rett kjøl. Ellers kan du alltids google for å se et litt mer komplett eksempel, heh. Endret 8. oktober 2006 av zirener Lenke til kommentar
Grimnar_ Skrevet 8. oktober 2006 Forfatter Del Skrevet 8. oktober 2006 Takk for all hjelp.... men får fortsatt en feilmelding: error C2512: 'Node' : no appropriate default constructor available Lenke til kommentar
lnostdal Skrevet 8. oktober 2006 Del Skrevet 8. oktober 2006 (endret) class Node { public: ... Node() { // this is a "default constructor" for the class `Node' } ... }; Endret 8. oktober 2006 av lnostdal Lenke til kommentar
Grimnar_ Skrevet 8. oktober 2006 Forfatter Del Skrevet 8. oktober 2006 (endret) men jeg har jo konstruktøren min i Node.cpp EDIT: Skal ikke det holde? Endret 8. oktober 2006 av Grimnar_ Lenke til kommentar
lnostdal Skrevet 8. oktober 2006 Del Skrevet 8. oktober 2006 men jeg har jo konstruktøren min i Node.cpp EDIT: Skal ikke det holde? 7025912[/snapback] #include <iostream> class Blah1 { public: }; class Blah2 { public: Blah2(int i){ } }; int main(int argc, char* argv[], char* env[]){ Blah1 blah1; // ok Blah2 blah2; // ikke ok return 0;} Lenke til kommentar
☀ ❄ Skrevet 8. oktober 2006 Del Skrevet 8. oktober 2006 Grunnen til at det ikke er ok er naturligvis fordi Node-en din krever en int som argument, men får ingen. Det du da kan gjøre er f.eks. å bruke et default argument/parameter, slik: class Node { public: Node(int x = 0) { /* ... */ } }; Da kan Node-en konstrueres på følgende måter: Node n; // Gir en node hvor x-en er 0 Node n(5); // Gir en node hvor x-en er 5 Lenke til kommentar
Grimnar_ Skrevet 8. oktober 2006 Forfatter Del Skrevet 8. oktober 2006 (endret) aha.... Da er det egentlig bare å skrive koden som skal overføre verdien av x! Endret 8. oktober 2006 av Grimnar_ Lenke til kommentar
☀ ❄ Skrevet 8. oktober 2006 Del Skrevet 8. oktober 2006 aha.... Da er det egentlig bare å skrive koden som skal overføre verdien av x! 7027334[/snapback] Som er best å gjøre med en initialiseringsliste: class Node { public: Node(int new_x = 0) : x(new_x) { /* ... */ } private: int x; }; Lenke til kommentar
Grimnar_ Skrevet 9. oktober 2006 Forfatter Del Skrevet 9. oktober 2006 (endret) da har jeg lært meg litt til.... takker så mye!! MEN det er en ting som jeg ikke helt er med på. Når jeg skal skrive ut denne listen jeg har laget så går det galt. Tror ikke jeg får valgt riktig X. EDIT: Se nederst i koden! #include <iostream> #include <string> using namespace std; #include ".\Node.h" int main() { int input = 0; int Ant = 0; Node BaseNode(input); //Base noden som skal være starten på listen Node* pLastNode = &BaseNode; //peker til den forrige noden(skal holde styr på hvor vi er i listen) do { cout << "Skriv inn x nr:" << (Ant + 1)<< " "; cin >> input; // her skal man lese inn x eller bare bruke i som jeg har Ant++; Node* CurrentNode = new Node(input);//allokerer en nye Node dynamisk pLastNode->NextNode = CurrentNode; //legger til CurrentNode son et ledd i linked list til pLastNode pLastNode = CurrentNode; // setter den nye Noden(CurrentNode) som pLastNode. }while(Ant < 15); /* while(Ant >= 0) { Her blir den en enkel cout setning, men hvordan velger jeg x i nodene? hvordan velger jeg den neste noden? }; */ // delete på alle nodene hvis ikke har man en memory leak } Endret 9. oktober 2006 av Grimnar_ Lenke til kommentar
Giddion Skrevet 10. oktober 2006 Del Skrevet 10. oktober 2006 Mulig du har endre litt på Node klassen, men NextNode kan ikke være private slik du bruker den. Skjult tekst: (Marker innholdet i feltet for å se teksten): #include <iostream> #include <string> using namespace std; #include ".\Node.h" int main() { int input = 0; int Ant = 0; Node BaseNode(input); //Base noden som skal være starten på listen Node* pLastNode = &BaseNode; //peker til den forrige noden(skal holde styr på hvor vi er i listen) do { cout << "Skriv inn x nr:" << (Ant + 1)<< " "; cin >> input; // her skal man lese inn x eller bare bruke i som jeg har Ant++; Node* CurrentNode = new Node(input);//allokerer en nye Node dynamisk pLastNode->NextNode = CurrentNode; //legger til CurrentNode son et ledd i linked list til pLastNode pLastNode = CurrentNode; // setter den nye Noden(CurrentNode) som pLastNode. }while(Ant < 15); ///////// Har bare gjort endringer på koden under her pLastNode = &BaseNode; //peker til den forrige noden(skal holde styr på hvor vi er i listen) while(Ant >= 0) { cout << pLastNode->x; pLastNode = pLastNode->NextNode; Ant--; // teller ned //Her blir den en enkel cout setning, men hvordan velger jeg x i nodene? //hvordan velger jeg den neste noden? }; // delete på alle nodene hvis ikke har man en memory leak } Jeg har desverre ikke tid til å komentere koden, men det finner du nok ut av. Lykke til. Lenke til kommentar
Grimnar_ Skrevet 10. oktober 2006 Forfatter Del Skrevet 10. oktober 2006 da fatter jeg... glemte å sette pLastNode = &BaseNode; noe som sier at pLastNode blir adressen til BaseNode ikkesant!?! Takker til alle for gode svar på dumme spm. (kommer sikkert flere) Lenke til kommentar
Giddion Skrevet 11. oktober 2006 Del Skrevet 11. oktober 2006 da fatter jeg... glemte å sette pLastNode = &BaseNode; noe som sier at pLastNode blir adressen til BaseNode ikkesant!?! 7042544[/snapback] Stemmer det. For å bla deg gjennom den lenka listen så kan du bare gå framover(det hadde muligens være kjekt med en mulighet til å gå bakover) Derfor må du starte på det eneste punktet som du vet er starten på listen nemlig BaseNode. Lenke til kommentar
lnostdal Skrevet 11. oktober 2006 Del Skrevet 11. oktober 2006 (endret) da fatter jeg... glemte å sette pLastNode = &BaseNode; noe som sier at pLastNode blir adressen til BaseNode ikkesant!?! 7042544[/snapback] .. For å bla deg gjennom den lenka listen så kan du bare gå framover(det hadde muligens være kjekt med en mulighet til å gå bakover) .. 7045661[/snapback] class Node { public: ... private: Node* next_node; Node* prev_node; // "gå bakover" }; http://en.wikipedia.org/wiki/Linked_list#Doubly-linked_list Endret 11. oktober 2006 av lnostdal 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å