У меня есть функция с тем же именем, но с другой подписью в базовом и производном классах. Когда я пытаюсь использовать функцию базового класса в другом классе, который наследует от производного, я получаю сообщение об ошибке. См. Следующий код:
class A
{
public:
void foo(string s){};
};
class B : public A
{
public:
int foo(int i){};
};
class C : public B
{
public:
void bar()
{
string s;
foo(s);
}
};
Я получаю следующую ошибку от компилятора gcc:
In member function `void C::bar()': no matching function for call to `C::foo(std::string&)' candidates are: int B::foo(int)
Если я удалю int foo(int i){};
из класса B
, или если я переименую его из foo1
, все будет хорошо.
Какая проблема с этим?