Witam,
Napisałem poniższy kod oparty na kompozycji:
#include <iostream>
using namespace std;
class Osoba;
class Nauczyciel {
public:
Osoba *osoba;
double pensja;
};
class Osoba {
public:
string nazwisko;
int pesel;
};
int main(void) {
Nauczyciel n1;
n1.osoba = new Osoba();
n1.osoba->nazwisko = "Kowalski";
n1.pensja = 2000.0;
cout << n1.osoba->nazwisko << " " << n1.pensja << endl;
delete n1.osoba;
return 0;
}
Jak widać, w związku z tym że hierarchia klas została naruszona, użyłem definicji zwrotnej (prototypu) klasy Osoba, by wstępnie poinformować kompilator o tym, że "gdzieś w tym pliku ona jest".
Chciałbym z tego samego mechanizmu skorzystać przy dziedziczeniu. Kierując się analogią napisałem następujący kod:
#include <iostream>
using namespace std;
class Osoba;
class Nauczyciel : public Osoba {
public:
double pensja;
};
class Osoba {
public:
string nazwisko;
int pesel;
};
int main(void) {
Nauczyciel *n1 = new Nauczyciel;
n1->nazwisko = "Nowak";
n1->pensja = 2000.0;
cout << n1->nazwisko << " " << n1->pensja << endl;
delete n1;
return 0;
}
Oczywiście g++ nie może tego skompilować. Zastanawiam się dlaczego? W jaki sposób mogę to rozwiązać?
Z góry dziękuję za zainteresowanie,
M.