可能重复:
重载函数隐藏在派生类中
我有A类和B类(A的子类)
A类有功能
virtual void foo(int, int);
virtual void foo(int, int, int);
Run Code Online (Sandbox Code Playgroud)
当我尝试做的时候
B级功能
virtual void foo(int, int);
Run Code Online (Sandbox Code Playgroud)
当我尝试用类调用foo(int,int,int)时,编译器不会让我,因为它说
no matching function for foo(int,int,int)
candidate is foo(int,int);
Run Code Online (Sandbox Code Playgroud)
Jar*_*Par 11
之所以与C++的名称查找和重载解析方式有关.C++将从表达式类型开始并向上查找,直到找到与指定名称匹配的成员.然后,它将仅考虑在已发现类型中具有该名称的成员的重载.因此,在这种情况下,它只考虑foo声明的方法B,因此无法找到重载.
最简单的补救方法是添加using A::foo到class B强制编译考虑这些过载也.
class B : public A {
using A::foo;
virtual void foo(int, int);
};
Run Code Online (Sandbox Code Playgroud)