lez*_*lon 1 c++ visual-studio-2010 visual-studio-2008 visual-c++
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); };
}; // ^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
以前的代码将无法编译:error C2660: 'Derived::myFunc' : function does not take 2 arguments
显然,编译器无法看到我正在尝试调用Base类中定义的函数,或者任何覆盖它的函数.另一方面,以下代码编译好了:
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); };
};
Run Code Online (Sandbox Code Playgroud)
我想我在第一个例子中尝试做的是合法的C++,这是VS2010编译器中的一个错误吗?我和VS2008的结果相同
谢谢
编辑:我找到的解决方法是使用
virtual void myFunc(double a) { return ((Base*)this)->myFunc(a, 0.0); };
Run Code Online (Sandbox Code Playgroud)
但我不是100%肯定它有完全相同的效果,任何人都可以确认吗?
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |