Witam napisałem taki kod, do momentu gdy nie dodałem pochodnej klasy"Ptak" wszystko działało, chcę teraz dodać tą klasę, ale napotykam problem:
Undefined reference to 'vtable' for Ptak
Czy statyczna zmienna jest także dziedziczona ? Jeśli tak chciałbym aby licznik obiektów był osobny dla Ptak a dla klasy bazowej.
#include <iostream>
using namespace std;
////////////////////////////////////////////////////////////////////////////////////
class Zwierze {
private:
static int liczba_obiektow;
string nazwa;
int liczba_konczyn;
public:
void przemieszczaj();
static void wypisz_liczbe_obiektow();
virtual void wypisz(ostream& out);
void ubij_obiekt();
friend ostream& operator<<(ostream& out, Zwierze& zwierz);
Zwierze();
~Zwierze(){ubij_obiekt();};
};
int Zwierze::liczba_obiektow = 0 ;
void Zwierze::ubij_obiekt() {
Zwierze::liczba_obiektow--;
}
Zwierze::Zwierze() {
liczba_obiektow++;
nazwa="brak";
liczba_konczyn=0;
}
ostream& operator<<(ostream& out, Zwierze& zwierz) {
zwierz.wypisz(out);
return out;
}
void Zwierze::wypisz(ostream& out) {
out << "Nazwa: " << nazwa << endl ;
out << "Liczba obiektow: " << liczba_obiektow << endl ;
out << "Liczba konczyn: " << liczba_konczyn << endl ;
}
void Zwierze::przemieszczaj() {
cout << "Poruszam bazowym obiektem." << endl ;
}
void Zwierze::wypisz_liczbe_obiektow(){
cout << "Ilosc obiektow: " << liczba_obiektow << endl;
}
////////////////////////////////////////////////////////////////////////////////////////
class Ptak:public Zwierze {
private:
int liczba_nog;
int liczba_skrzydel;
public:
Ptak():Zwierze(){
liczba_nog = 2;
liczba_skrzydel = 2;
};
~Ptak(){Zwierze::ubij_obiekt();};
void przemieszczaj();
void wypisz(ostream& out);
};
////////////////////////////////////////////////////////////////////////////////////////
int main()
{
Zwierze z1;
Zwierze z2;
Ptak p1;
cout << z1;
cout << z2;
return 0;
}