【发布时间】:2011-09-08 03:39:01
【问题描述】:
考虑这个演示程序:
#include <stdio.h>
class Base
{
public:
virtual int f(int) =0;
virtual int f(){ return f(0); }
virtual ~Base(){ }
};
class Derived : public Base
{
public:
int f(int i)
{
return (10 + i);
}
};
int main(void)
{
Derived obj;
printf("%d\n", obj.f(1)); // This works, and returns 11
printf("%d\n", obj.f()); // Adding this line gives me the error listed below
}
这给了我以下编译错误:
virtualfunc.cpp: In function ‘int main()’:
virtualfunc.cpp:25:26: error: no matching function for call to ‘Derived::f()’
virtualfunc.cpp:15:9: note: candidate is: virtual int Derived::f(int)
我希望调用obj.f() 会导致调用Base::obj.f(),因为派生类没有定义它,然后根据类Base 中的定义调用Derived::obj.f(0)。
我在这里做错了什么?有没有办法做到这一点?具体来说,我希望对 obj.f() 的调用返回 10。
(另外请注意,我意识到我可以使用默认参数来解决这个问题,但这段代码只是我问题的一个简明示例,所以请不要告诉我使用默认参数。)
谢谢。
【问题讨论】:
-
f函数在Derivedhides其他函数中,在Base中定义。这就是您收到此错误的原因 -
@Kiril Kirov,你赢了——如果你想回答这个问题,我会将其标记为正确。在派生类定义中显式添加
using Base::f;修复了它。谢谢! -
@raj -- 是的,它似乎是;我道歉。实际上,我筛选了 20 个左右的问题,这些问题没有回答我的问题,也没有遇到过这个问题。
-
@jedwards - 我很高兴,我提供了帮助。我添加了我的答案(:
标签: c++ inheritance pure-virtual