Przepraszam, że to już mój 4 temat dzisiaj, ale mam z tym problemy i nic nie ogarniam
class figura {
public:
void jakas_funkcja() const;
protected:
//nieistotne zmienne
};
...
class czworokat : public figura {
public:
czworokat(int,int,int,int,int,int,int,int);
float pole() const { return 3;}
};
...
class kwadrat : public czworokat {
public:
kwadrat(int,int,int,int,int,int,int,int);
float pole() const;
};
float kwadrat::pole() {... return p;}
list<figura> czworokaty;
...
list<list<figura> > figury;
czworokaty.push_back(czworokat(0,0,0,1,1,1,1,0));
figury.push_back(czworokaty);
for(ListaList::const_iterator cq = figury.begin(); cq!=figury.end(); ++cq) {
for(FiguraLista::const_iterator ci = (*cq).begin(); ci!=(*cq).end(); ++ci) {
...
cout << "\nPole: " << ci->pole(); //błąd
}
}
}
Błąd:
error: 'const class figura' has no member named 'pole'|
Nie wiem czy powinno być to const przy iteratorze, ale bez tego błąd wygląda analogicznie bez consta.
Dlaczego nie jest wywoływana po prostu funkcja z klasy kwadrat? Kiedy dodam funkcje pole do klasy figura, to ona jest wtedy wywoływana, a potrzebuję, aby wykonywała się funkcja z klasy której obiekt jest aktualnie obsługiwany.