Lista typu abstrakcyjnego i wywoływanie metod klas pochodnych

0

Mam listę

list<Bryla*> sc;

Bryla jest klasą abstrakcyjną z kilkoma metodami wirtualnymi, m.in.

bool hasId(string id)

Do tej listy chcę dodawać wskaźniki do obiektów klas pochodnych klasy Bryla.
Problem jest kiedy iteruję po tej liście i próbuję wywołać metodę wirtualną na jej elementach. Wyczytałem,że powinna się wywołać metoda z klasy obiektu na którym ją wywołuję,ale kompilator protestuje

bool Scena::hasId(string id)
{
    bool temp=false;

    for(list<Bryla*>::iterator it=sc.begin(); it != sc.end(); ++it)
        if( it->getId() == id)  //podkreśla it z komunikatem : expression must have pointer-to-class type
            temp=true;
    return temp;
}

Proszę o wyjaśnienie dlaczego tak się dzieje i jak to naprawić lub
podanie innego sposobu na przechowywanie obiektów różnych klas w jednym kontenerze jeśli ten się nie nadaje.

sformatowanie znaczników <code> - fp

3

Wszystko jest ok tylko iterator już sam sobie ma składnię wskaźnika. Tzn odwołanie sie do tego na co pokazuje iterator wymaga *.

(*(it))->getId()

zadziała

Bo dopiero it jest typu Bryla

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