快六次说...为什么不在MSVC 2010中编译?
class A {
public:
void foo(int a, int b) { };
void foo(int a) { };
};
class B: public A {
public:
void foo(int a, int b) { }; // <-- comment this out to compile
};
int main(int argc, char* argv[])
{
B b;
b.foo(1); // <-- doesn't compile... shouldn't B just inherit this overload?
}
答案 0 :(得分:1)
覆盖时,覆盖名称,而不是特定的重载。所以它隐藏了基类的所有重载。要解决这个问题,您可以将using A::foo;
放在派生类中,以将重载降低到B
。