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 回答