Problem z polimorfizmem

0

Mam problem, z którym już jakiś czas się męczę - otóż wywala mi błąd treści:

g++  -Iinc -W -Wall -pedantic -c -o obj/scena_robocza.o src/scena_robocza.cpp
src/scena_robocza.cpp: In member function ‘bool ScenaRobocza::SprawdzKolizje()’:
src/scena_robocza.cpp:26: error: request for member ‘CzyPrzeciecie’ in ‘* Iter.std::_List_iterator<_Tp>::operator-> [with _Tp = przeszkoda*]()’, which is of non-class type ‘przeszkoda*’

Sam kod wygląda tak:

bool ScenaRobocza::SprawdzKolizje() {
  unsigned int i;
  for(list<przeszkoda*>::iterator Iter = ListaP.begin();
      Iter != ListaP.end(); ++Iter) {
    for(i = 0; i < Manip.IloscOgn(); i++) {
	odcinek Odc = Manip.ZwrocOdcinek(i);
      if(Iter->CzyPrzeciecie(Odc))
	 return true;
	 }
  }
    return false;
}

Klasa wielobok i kolo dziedziczą po klasie przeszkoda. Wykorzystują one funkcje wirtualne. Męczę się już z tym jakiś czas i proszę bardzo o pomoc.

0
bool ScenaRobocza::SprawdzKolizje() {
  unsigned int i;
  for(list<przeszkoda*>::iterator Iter = ListaP.begin();
      Iter != ListaP.end(); ++Iter) {
    for(i = 0; i < Manip.IloscOgn(); i++) {
        odcinek Odc = Manip.ZwrocOdcinek(i);
      if((*Iter)->CzyPrzeciecie(Odc))
         return true;
         }
  }
    return false;
}

Spróbuj tak, zmieniłem tylko tą linijkę:

if((*Iter)->CzyPrzeciecie(Odc))

Zmieniłem w ten sposób dlatego, że lista po której krąży iterator Iter przechowuje wskaźniki na przeszkody (sam iterator przechowuje wskaźnik na przechowywane elementy) więc najpierw wyłuskujesz iterator (otrzymujesz wskaźnik na przeszkodę) i teraz wyłuskujesz przeszkodę i możesz dobrać się do metody klasy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1