C++ 在“平均值+=abs(num)”中重载“abs(double&)”
下面是我遇到问题的代码。avg+=absnum行中有一个错误,但我无法解决它。错误代码:C++ 在“平均值+=abs(num)”中重载“abs(double&)”,c++,C++,下面是我遇到问题的代码。avg+=absnum行中有一个错误,但我无法解决它。错误代码: error: call of overloaded 'abs(double&)' is ambigous 我意识到它非常基本,但在Herbert Schildt的《我在使用C++:初学者指南》第二版中,这里使用的一个示例中的代码是相同的: #include <iostream> #include <cstdlib> using namespace std; int ma
error: call of overloaded 'abs(double&)' is ambigous
我意识到它非常基本,但在Herbert Schildt的《我在使用C++:初学者指南》第二版中,这里使用的一个示例中的代码是相同的:
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
double num, avg;
int x = 5;
int i;
avg = 0.0;
for (i = 1; i <= x; ++i){
cout << "Enter value " << i << ": ";
cin >> num;
avg += abs(num);
}
avg /= x;
cout<< endl;
cout << "The average is " << avg;
return 0;
}
您没有为std::abs的浮点重载包含正确的标头:
本书的代码为:
#include <iostream>
#include <cmath>
// ^^^^^
using namespace std;
int main()
{
double num, avg; // The type is double not int !!!
//^^^^^^
int i;
avg = 0.0;
for (i = 0; i < 5; ++i){
// ^ ^
cout << "Enter value : ";
// ^^^^
cin >> num;
avg += abs(num);
}
avg /= 5;
// ^
cout<< endl;
cout << "The average is " << avg;
return 0;
}
文件:
编辑:但cstdlib中声明的函数abs作为原型:
int abs ( int n);
long int abs ( long int n);
long long int abs (long long int n);
但在cmath中:
但在这里,您似乎希望使用double,如果不使用,您将丢失该值的小数部分:avg/=5。因此,cmath版本更适合。否则,您的代码应为:
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int num, avg;
//^^^^^^
int i;
avg = 0;
// ^
for (i = 0; i < 5; ++i){
cout << "Enter value : ";
cin >> num;
avg += abs(num);
}
avg /= 5; // but you loose the decimal part...
cout<< endl;
cout << "The average is " << avg;
return 0;
}
你的问题在哪里?那是什么?我编译代码时出错了。然而,我找不到解决这个错误的方法。发生错误的行是avg+=absnum;你在用什么编译,如何编译?您的代码可以编译并为我工作。@user2583389您正在评论中发布,在您的问题中发布更合适,如前所述。仔细检查后,代码很糟糕。它将avg声明为int,然后尝试将其用作double。包括cmath就足够的cstdlib。并在1而不是0处开始循环,这是没有充分理由的。如果该代码来自一本书,则需要另一本书。该书从未包含此代码。这是否意味着这本书可能是错的?@user2583389:是的;如果书中没有这一点,那就错了。请注意,作者有一点写不好的书的名声,所以如果这本书不是特别好,我也不会感到惊讶。您可能会发现有用的替代方法。在C++库的某些变体中,包含或包含恰好也会在头中拖动,这是不可能的。但是使用abs,应该让你的代码想在代码中添加include——总是包含你需要的一切——不管它是否在没有它的情况下编译。常量应该被使用,或者至少定义一下。@MartinPerry只是复制了这本书的粘贴:-当然这真的很糟糕。我同意你的观点@PierreFourgeaud+1用于检查书中的代码:
int abs ( int n);
long int abs ( long int n);
long long int abs (long long int n);
double abs (double x);
float abs (float x);
long double abs (long double x);
double abs (T x);
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int num, avg;
//^^^^^^
int i;
avg = 0;
// ^
for (i = 0; i < 5; ++i){
cout << "Enter value : ";
cin >> num;
avg += abs(num);
}
avg /= 5; // but you loose the decimal part...
cout<< endl;
cout << "The average is " << avg;
return 0;
}