Piszę program obsługujący listę dwukierunkową cykliczną i mam pewien problem. Mam klasę Lista i klasę Element, Lista jest przyjacielem Element, abym mógł za pomocą metod Lista dodawać elementy i operować ich atrybutami. Problem polega na tym, że w każdej metodzie Lista przy kompilacji otrzymuję błąd "lista was not declared in this scope". lista jest oczywiście obiektem klasy Lista. Pierwszą metodą jest dodanie jednego elementu i obsługuje ona przypadek gdy nie ma jeszcze elementów (utwórz listę i dopiero element) oraz gdy już są elementy (utwórz tylko element) - to działa.. Jednak inne metody (np. policz elementy, dodaj x nowych, usuń element) w domyśle są wywoływane tylko gdy obiekt lista istnieje, a nawet po dodaniu obsługi przypadku gdy lista nie istnieje, nadal otrzymuję błąd "not declared". Co mogę w tej sytuacji zrobić? Dodać w deklaracji klasy Lista static wystarczy? Nie będzie nieprzewidzianych efektów ubocznych?
#include <iostream>
#include <windows.h>
using namespace std;
int * tab;
int licznik = 0;
int wylosowanych = 0;
class element{
friend class Lista;
protected:
int klucz;
double d;
char c;
element * nastepny;
element * poprzedni;
};
class Lista {
static element * pierwszy;
static element * ostatni;
Lista();
~Lista();
void wstaw_nowy(){
int liczba;
wczytanie:
cout<<"Podaj wartosc klucza nowego elementu: ";
cin>>liczba;
if (tab){
for (int i = 0; i<=wylosowanych; i++){
if (liczba == tab[i]){
cout<<"Element o takim kluczu ju¿ istnieje!"<<endl;
system("pause");
goto wczytanie;
}
else break;
}
}
tab[wylosowanych]=(int)malloc(sizeof(int));
tab[wylosowanych]=liczba;
wylosowanych++;
Lista lista;
if (licznik == 0){ //licznik przechowuje iloœæ elementów listy
element * elem = new element;
elem->klucz = liczba;
elem->c = (char)84;
elem->d = rand()%10000-1000;
elem->nastepny = elem;
elem->poprzedni = elem;
lista.pierwszy = elem;
lista.ostatni = elem;
licznik++;
}
else{
element * wsk;
wsk = lista.pierwszy;
for (int i = 0; i<=licznik; i++){
if((wsk->klucz < liczba)&&((wsk->nastepny->klucz) > liczba)){
element * elem = new element;
elem->klucz = liczba;
elem->c = (char)84;
elem->d = rand()%10000-1000;
elem->nastepny = wsk->nastepny;
elem->poprzedni = wsk;
wsk->nastepny = elem;
wsk->nastepny->poprzedni = elem;
licznik++;
break;
}
wsk = wsk->nastepny;
}
}
};
/* void wstaw_x_nowych(ile){
for (int i = 0; i<=ile; i++){
wstaw nowy();
}
};*/
void wyszukaj();
void usun(int wart){
element * szukany = lista.pierwszy;
for (int i = 0; i<=licznik; i++){
if (szukany->klucz == wart){
szukany->poprzedni->nastepny = szukany->nastepny;
szukany->nastepny->poprzedni = szukany->poprzedni;
delete szukany;
}
}
};
void pokaz_pierwsze(int Y){
element *wsk = lista.pierwszy;
for (int i=0; i<=Y;i++){
cout<<wsk->klucz<<endl;
wsk=wsk->nastepny;
}
};
void pokaz_ostatnie(int X){
element * wsk = lista.pierwszy;
for (int i=0; i<=Y;i++){
cout<<wsk->klucz<<endl;
wsk=wsk->poprzedni;
};
void ile_wezlow(){
int wezly = 0
element * wsk = lista.pierwszy;
while (wsk->nastepny != lista.ostatni){
wezly++;
wsk = wsk->nastepny;
}
return wezly;
};
void usun_wszystko(){
element * wsk = lista.pierwszy;
for (int i =0; i<=ile_wezlow(); i++){
delete element;
}
delete lista;
};
};
int main()
{
cout << "Hello world!" << endl;
return 0;
}