0

以下是我遇到问题的代码。行中有错误,avg += abs(num)但我无法解决。错误代码:

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;
}
4

2 回答 2

4

您没有包含以下浮点重载的正确标头std::abs

#include <cmath>
于 2013-07-29T11:46:00.090 回答
3

这本书的代码是:

#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;
}

我在这本书的副本上找到了它...

并且std::abs你应该包括标题cmath

#include <cmath>

文档:http ://www.cplusplus.com/reference/cmath/abs/

编辑:abs声明的函数cstdlib具有原型:

          int abs (          int n);
     long int abs (     long int n);
long long int abs (long long int n);

但是在cmath

     double abs (double x);
      float abs (float x);
long double abs (long double x);
     double abs (T x);

但是在这里,您似乎想要使用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;
}
于 2013-07-29T11:47:03.960 回答