Exemplo

class Base {
public:
void fnc();
};


class Derived: public Base {
public:
void fnc(){}
};


void call
DerivedFunction(Base *ptr){

Derived *dp = (Derived*) ptr;
dp->fnc();

}

Solução
Não converta um ponteiro de uma classe em um ponteiro de uma classe da qual ele não herda. Para evitar erros, não utilize ponteiros para downcasting. Utilize funções virtuais no lugar.

class Base {
public:
virtual void fnc();
};


class Derived: public Base {
public:
virtual void fnc(){}
};


void callDerivedFunction
(Base *ptr){

ptr->fnc();

}