Пример

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

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

int main(){
Derived d;

Base *basePtr = &d;
Derived *derivedPtr = &d;

basePtr->fnc();//вызывает Base::fnc()
derivedPtr->fnc();  //вызывает Derived::fnc()

return 0;
}

Решение
Не переопределять невиртуальные функции. Изменить проект, с тем чтобы не использовать  базовый класс, либо сделать функцию базового класса виртуальной, чтобы обеспечить полиморфное поведение.


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

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

int main(){
Derived d;

Base *basePtr = &d;
Derived *derivedPtr = &d;

basePtr->fnc();//вызывает 
Derived::fnc()
derivedPtr->fnc();  //вызывает Derived::fnc()

return 0;
}