Analizuje program, ktory dodaje elementy do listy i je wyswietla.
Kod:
#include<iostream>
using namespace std;
struct link {
int data; //data item
link* next; //pionter to next link
};
class linklist {
private:
link* first;
public:
linklist() {first = NULL;}
void additem(int d);
void display();
};
void linklist::additem(int d){
link* newlink = new link;
newlink->data = d;
newlink->next = first;
first = newlink; //now first pionts to this
}
void linklist::display() {
link *current = first;
while (current != NULL) {
cout << current->data << endl;
current = current->next; //move to next link
}
}
int main(){
linklist li;
li.additem(25);
li.additem(23);
li.additem(0);
li.additem(64);
li.display();
return 0;
}
Niestety otrzymuje blad nastepujacej postaci:
Kod:
list.cpp:12:9: error: must use 'struct' tag to refer to type 'link' in this scope
link* first;
^
struct
list.cpp:20:11: error: use of undeclared identifier 'newlink'
link* newlink = new link;
^
list.cpp:20:25: error: expected a type
link* newlink = new link;
Mam rowniez pytanie do niektorych miejsc w programie.
O ile dobrze rozumiem listy, to opieraja sie one na wezlach. Kazdy wezel posiada dokladnie jeden element listy, oraz adresy nastepnego i poprzedniego elementu (w moim kodzie tylko nastepnego).
Kazdy element listy w powyzszym kodzie jest tworzony za pomoca new. Czy jest to konieczne? Czy w przeciwnym wypadku bedzie zabierac az tak bardzo duzo pamieci? Czy nie musimy gdzies uzyc delete?
Dlaczego next musi byc typu link?
Bede niezmiernie wdzieczna za pomoc.