gpt4 book ai didi

c++ - 这是Visual 2010的编译错误吗?

转载 作者:行者123 更新时间:2023-11-30 00:38:32 25 4
gpt4 key购买 nike

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显然,编译器看不到我正在尝试调用 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); };
};

我认为我在第一个示例中尝试做的是合法的 C++,那么这是 VS2010 编译器中的错误吗?我与 VS2008 的结果相同

谢谢

编辑:我发现的解决方法是使用

virtual void myFunc(double a) { return ((Base*)this)->myFunc(a, 0.0); };

但我不是 100% 确定它具有完全相同的效果,任何人都可以确认吗?

最佳答案

此行为是设计使然。

派生类中的函数 hide other overloads in the base class .

关于c++ - 这是Visual 2010的编译错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10523342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com