【发布时间】:2011-05-05 11:24:43
【问题描述】:
我有点想明白为什么这段代码 sn-p 无法编译。
#include <cstdio>
class A {
public:
virtual int potential()=0;
virtual int potential(int arg, int arg2)=0;
};
class B : public A {
public:
int potential() { return 1; }
virtual int potential(int arg, int arg2) { return 2; }
};
class C : public B {
public:
int potential(int arg, int arg2) { return 3; }
};
int main(int argc, char** argv) {
C c;
int value = c.potential();
printf("Got %i\n", value);
return 0;
}
我有两个纯虚方法,都在抽象超类A 中命名为potential。子类 B 然后定义了这两个方法,但另一个子类 C 只需要重新定义其中一个方法。
但是,在编译时,只能识别C中定义的方法,而看不到potential()(这应该是继承自B):
In function 'int main(int, char**)':
Line 23: error: no matching function for call to 'C::potential()'
compilation terminated due to -Wfatal-errors.
如果我将A::potential(int, int) 重命名为继承树下的其他名称,例如A::somethingElse(int, int),则代码编译良好,输出为Got 1,正如预期的那样。
这已使用 clang、g++ 和 MSVC 的 cl 进行了验证。
有什么想法吗?
【问题讨论】:
-
按照建议使用
<cstdio>。
标签: c++ inheritance