【发布时间】:2012-05-09 20:07:43
【问题描述】:
class Base {
public:
virtual void myFunc(double a, double b) { };
virtual void myFunc(double a) { };
};
class Derived : public Base {
public:
virtual void myFunc(double a) { return this->myFunc(a, 0.0); };
}; // ^^^^^^^^^^^^^^^^^^^^
前面的代码无法编译:error C2660: 'Derived::myFunc' : function does not take 2 arguments
显然编译器看不到我正在尝试调用基类中定义的函数,或任何覆盖它的函数。另一方面,以下代码编译正常:
class Base {
public:
virtual void myFunc2(double a, double b) { };
virtual void myFunc(double a) { };
};
class Derived : public Base {
public:
virtual void myFunc(double a) { return this->myFunc2(a, 0.0); };
};
我认为我在第一个示例中尝试做的是合法的 C++,那么这是 VS2010 编译器中的错误吗?我用 VS2008 也有同样的结果
谢谢
编辑:我发现的一种解决方法是使用
virtual void myFunc(double a) { return ((Base*)this)->myFunc(a, 0.0); };
但我不能 100% 确定它具有完全相同的效果,有人可以确认吗?
【问题讨论】:
-
尝试在课程开头添加
using Base::myFuncDerived。
标签: c++ visual-studio-2010 visual-studio-2008 visual-c++