Otóż mam taki problem. Piszę spory projekt z C++ i mam w nim klasy które dziedziczą po sobie. Mam do stworzenia obiekty i operacje na tych obiektach. Obiekty chciałem umieścić na liście statycznej. Oto kod:
#include
#include
#include
#include
#include
#include
using namespace std;
//Klasa nadrzędna
class A
{
private:
int licA;
protected:
int liczA;
public:
};
//Klasa podrzędna
class B : public A
{
private:
int licB;
protected:
int liczB;
public:
};
//Klasa podrzędna
class C : public A
{
private:
int licC;
protected:
int liczC;
public:
};
//Liść
class D : public B
{
private:
int licD;
string nazwa;
protected:
int liczD;
public:
static list objectsD;
D(string _nazwa, int _liczA, int _liczB, int _licD, int _liczD);
friend void utworz_obiekt_D();
friend void usun_obiekt_D();
};
D::D(string _nazwa, int _liczA, int _liczB, int _licD, int _liczD)
{
nazwa=_nazwa;
liczA=_liczA;
liczB=_liczB;
licD=_licD;
liczD=_liczD;
objectsD.push_back(*this);
}
//Deklaracja pozostałych klas
//FUNKCJE TWORZĄCE OBIEKTY
void utworz_obiekt_D()
{
string nazw;
int licd, liczd, liczb, licza;
cin >> nazw;
cout << "Liczba A: ";
cin >> licza;
cout << endl;
cout << "Liczba B: ";
cin >> liczb;
cout << endl;
cout << "Pierwsza liczba D: ";
cin >> licd;
cout << endl;
cout << "Druga liczba D: ";
cin >> liczd;
cout << endl;
D* objektD;
objektD = new D(nazw,licza,liczb,licd,liczd);
cout << "Do klasy D utworzono obiekt: " << nazw << "\n";
}
//pozostałe funkcje dodające obiekty
// ******************************************************************************
//FUNKCJE USUWAJACE OBIEKT
void usun_obiekt_D()
{
string nazw;
int stan = 0;
list::iterator z;
z=D::objectsD.begin();
cin >> nazw;
while(z != D::objectsD.end())
{
if (z->nazwa == nazw)
{
D::objectsD.erase(z);
cout <<"Z klasy D pomyslnie usunieto obiekt o nazwie: " << nazw <<"\n";
stan = 1;
break;
}
z++;
}
if (stan==0)
{
cout << "Obiekt o nazwie " << nazw << " nie istnieje w klasie D!\n";
}
}
//DRZEWO PROJEKTU
void drzewko()
{
cout <<" A" <
cout <<" |" <
cout <<" ---------------------" <
cout <<" | |" <
cout <<" B C" <
cout <<" | |" <
cout <<"----------- -----------" <
cout <<"| | | |" <
cout <<"D E F G" <
cout <<" | | |" <
cout <<" ---- ---- ---------" <
cout <<" | | | | |" <
cout <<" H --- I J K" <
cout <<" | |" <
cout <<" ------- ---" <
cout <<" | | |" <
cout <<" L M N" <
}
int main(int argc, char *argv[])
{
int n;
cout << "Czy chcesz zobaczyc drzewo swojego projektu? Jesli tak to wcisnij 1!\n";
cin >> n;
if (n==1)
{
drzewko();
}
cout << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
[/code]
problem jest taki że w trakcie kompilacji wywala mi [Linker error] undefined reference to `D::objectsD’ i tak jest do każdej klasy, która ma listę obiektów. Wie ktoś czemuż się tak dzieje??