请看下面的代码:
#include <iostream>
using namespace std;
class A {
public:
A() {};
virtual void foo(double d) { cout << d << endl; }
virtual void foo(double d, int a) = 0;
};
class B : public A {
public:
B() {};
virtual void foo(double d, int a) { cout << d << endl << a << endl; }
};
int main()
{
B b;
b.foo(3.14);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器(试过g ++和visual c ++ 2008)说没有像B:foo(double)这样的函数.g ++的确切消息是:
main.cpp:21:错误:没有匹配函数来调用'B :: foo(double)'
它看起来像隐藏规则的效果,但在我看来这里不应该使用规则,因为我没有覆盖foo(double),并且两个foo方法都是在基类中定义的.
我知道我可以解决这个问题
using A::foo;
Run Code Online (Sandbox Code Playgroud)
派生类B中的声明
你能解释为什么代码不能编译以及C++的规则适用于何处?
| 归档时间: |
|
| 查看次数: |
1474 次 |
| 最近记录: |