以下代码:
class Base1
{
public:
void go() {}
};
class Base2
{
public:
void go(int a) {}
};
class Derived : public Base1, public Base2 {};
int main()
{
Derived d;
d.go(3);
return 0;
}
将在编译过程中给出一个错误:
g++ -o a a.cc
a.cc: In function ‘int main()’:
a.cc:19:7: error: request for member ‘go’ is ambiguous
a.cc:10:10: error: candidates are: void Base2::go(int)
a.cc:4:10: error: void Base1::go()
make: *** [a] Error 1
很容易看出基类中的原型是不同的。但是为什么编译器不能检测到这一点并自动选择匹配的呢?
发布于 2012-06-08 14:32:19
函数重载不允许跨越类边界。您可以通过编写派生类来修复此问题,如下所示-
class Derived : public Base1, public Base2
{
public:
using Base1::go;
using Base2::go;
};
https://stackoverflow.com/questions/10943971
复制相似问题