同じ名前の関数がありますが、基本クラスと派生クラスのシグネチャが異なります。派生クラスから継承する別のクラスで基本クラスの関数を使用しようとすると、エラーが発生します。次のコードを参照してください。
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){};
class から削除するB
か、から名前を変更するとfoo1
、すべて正常に動作します。
これの何が問題なのですか?