1

Xcode 4.5 (Mac) で次のコードをコンパイルすると、コンパイルが失敗し、次のエラー メッセージが表示されます。

call to 'pow' is ambiguous

なんで?ありがとう!

#include <iostream>
#include <cmath>
#include <limits>

using namespace std;

int main()
{
    cout << "\tSquare root calculator using an emulation the ENIAC's algorithm." << endl
         << endl;

    long long m;
    while ((cout << "Enter a positive integer:" << endl)
            && (!(cin >> m) || m < 0 || m > 9999999999)) //10-digit maxium
    {
        cout << "Out of range.";
        cin.clear();
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }

    again:
    long long l = m;

//Find out how big the integer is and adjust k accordingly.
    int order = -1;
    long long temp = m;
    do
    {
        temp /= 10;
        order++;
    } while (temp/10);
    int k = order/2;

//Step 1
    long long a = -1;
    do
    {
        a+=2;
        m -= a*pow(100,k);
    } while (m >= 0);

    while (k > 0)
    {
        k--;

//Step 2
        if (m < 0)
        {
            a = 10*a+9;
            for (;m < 0;a -= 2)
            {
                m += a*pow(100,k);
            }
            a += 2;
        }

//Step 3
        else
        {
            a = 10*a-9;
            for(;m >= 0;a += 2)
            {
                m -= a*pow(100,k);
            }
                 a -= 2;
        }

    }

//Step 4
    cout << endl << "The square root of " << l << " is greater than or equal to "
         << (a-1)/2 << " and less than " << (a+1)/2 << "." << endl << endl;

    while ((cout << "Enter a positive integer to calculate again, or zero to exit." << endl)
            && (!(cin >> m) || m < 0 || m > 9999999999))
    {
        cout << "Out of range.";
        cin.clear();
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }


    if (m > 0) goto again;

    return 0;
}
4

2 に答える 2

2

このリンクはあなたの質問に答えているようです: http://bytes.com/topic/c/answers/727736-ambiguous-call-pow

pow() 関数は整数が好きではないようです。

于 2012-11-10T03:38:58.997 に答える
2

ここでわかるように、pow(int,int); はありません。

pow
    <cmath>
         double pow (      double base,      double exponent );
    long double pow ( long double base, long double exponent );
          float pow (       float base,       float exponent );
         double pow (      double base,         int exponent );
    long double pow ( long double base,         int exponent );
于 2012-11-10T03:40:57.410 に答える