Предупреждение говорит о том, что функция в производном классе затрудняет вызов исходной функции базового класса для объекта производного типа:
class Base {
public:
virtual void update(int param) final;
};
class Derived : public Base {
public:
void update();
};
void f(Derived& obj) {
obj.update(2); // Error!
// Name lookup for update finds only Derived::update,
// which takes no arguments
}
Чтобы "показать" базовый класс функция, чтобы производный класс действовал так, как если бы он имел обе перегрузки, используйте директиву using
:
class Derived : public Base {
public:
void update();
using Base::update;
};