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