Mam klasę Plansza:
class Plansza
{
public:
Plansza();
void ukladaj(ListaElementow *elementy, short int pole);
private:
Pole indeks[IPol];
Pole* t[Max][Max];
};
class Pole
{
public:
Pole();
friend class Plansza;
private:
void (Pole::*poloz) (Element *, ListaElementow *, unsigned short int *);
void polozSrodek(Element *element, ListaElementow *lista, unsigned short int *nr);
void polozBok(Element *element, ListaElementow *lista, unsigned short int *nr);
};
i klasę Pole w której tak jak to napisałem powyżej zdefiniowany jest wskaźnik 'poloz' ustawiany na funkcję polozSrodek lub polozBok dla każdego pola za pomocą konstruktora klasy Plansza.
Plansza::Plansza()
{
for (int i=0; i<Max; i++)
for (int j=0; j<Max; j++)
{
t[i][j]=&indeks[j*Max+i];
if (i==0 || j==0 || i==Max-1 || j==Max-1)
{
t[i][j]->poloz=&Pole::polozBok;
}
else
{
t[i][j]->poloz=&Pole::polozSrodek;
}
}
}
Funkcja na którą wskazuje wskaźnik jest uruchamiana z funkcji Plansza:
void Plansza::ukladaj(ListaElementow *elementy, short int pole)
{
if (pole<IPol)
{
Element *start;
short unsigned int *nr = new short unsigned int;
*nr=0;
while(indeks[pole].znajdz(&start, &elementy->lista[indeks[pole].fZera][indeks[pole].fKat], nr))
{
(indeks[pole].*poloz)(start, elementy, nr); // tu kompilator wyrzuca błąd error: ‘poloz’ was not declared in this scope
ukladaj(elementy, pole+1);
if (*nr < elementy->size())
(*nr)++;
else
break;
}
...
}
}