我正在尝试创建一个程序,我在其中重载函数以找到2,3或4个参数之间的最大值。我的代码目前看起来有点不稳定,每当我运行它时,我会收到“#include”下的可怕红线和三个参数函数调用。当我禁用它时,2和4参数都很好,但是我的3参数是不好的。你们其中一个人会介意看看它并尝试提供帮助吗?谢谢!
#include <cstdlib>
#include <iostream>
using namespace std;
double max (double, double, double, double);
int main(int argc, char** argv) {
double result;
result = max(10.0, 20.0);
cout << "Max(10.0, 20.0) = " << result << endl;
result = max(11.5, 21.2, 5.3);
cout << "Max(11.5, 21.2, 5.3) = " << result << endl;
result = max(1.8, 2.2, 1.7, 2.1);
cout << "Max(1.8, 2.2, 1.7, 2.1) = " << result << endl;
return 0;
}
double max(double a, double b)
{
if (a > b)
return a;
else
return b;
}
double max(double a, double b, double c)
{
if (a > b && a > c)
return a;
else if (b > a && b > c)
return b;
else
return c;
}
double max(double a, double b, double c, double d)
{
if (a > b && a > c && a > d)
return a;
else if (b > a && b > c && b > d)
return b;
else if (c > d)
return c;
else
return d;
}
答案 0 :(得分:2)
摆脱using namespace std;
,否则会导致您的职能与std::max
之间产生歧义。
一般来说,using namespace std
是considered bad practice,会导致问题,就像您看到的一样。
答案 1 :(得分:2)
在使用之前,您尚未使用三个参数声明重载。
添加
double max(double, double, double );
在你打电话之前。
在使用之前,您还应该使用两个参数版本声明重载,但最终会从标准库中选择一个版本。摆脱
using namespace std;
也应该检测到这个问题。
答案 2 :(得分:2)
按原样,这不会编译。您正在将std
命名空间引入当前范围,但在VS实施上不会调用std::max
,而Linux GCC实施时会有一个,显然是通过{{1}标题:
/ usr / local / include / c ++ / 7.2.0 / bits / stl_algobase.h:在实例化中 'constexpr const _Tp&amp; std :: max(const _Tp&amp;,const _Tp&amp;,_Compare)[with _Tp =双倍; _Compare = double]':
在stl_algobase.h
函数之前提供所有三个函数声明:
main()
话虽如此,不要使用double max(double, double);
double max(double, double, double);
double max(double, double, double, double);
int main() {
// same as before
}
声明。