0

以下は私が問題を抱えているコードです。行にエラーがありますが、avg += abs(num)解決できません。エラーコード:

error: call of overloaded 'abs(double&)' is ambigous

私はそれがかなり基本的であることを理解していますが、私が使用している本では、 Herbert Schildtによる「C++: A Beginner's Guide (second edition)」を使用しています。コードは、ここで使用されている例の 1 つと同じです。

#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 に答える