c++ - 使用 pow() 会出错

标签 c++ math cmath

请看下面的代码

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

int main()
{
    //int side1 = 0;
    //int side2 = 0;
    //int rightSide = 0;

    cout << "Right Side" << setw(10) << "Side1" << setw(10) << "Side2" << endl;

    for(int i=1;i<=500;i++)
    {
        //side1++;
        //cout << side1 << endl;

        for(int a=1;a<=500;a++)
        {
            //side2++;
            //cout << "side 2 " << side2 << endl;

            for(int c=1;c<=500;c++)
            {
                //rightSide++;
                int rightSideSqr = pow(c,c);
                int side1Sqr = pow(i,i);
                int side2Sqr = pow(a,a);

                if(rightSideSqr == (side1Sqr+side2Sqr))
                {
                    cout << rightSideSqr << setw(15) << i << setw(10) << a << endl;
                 }


            }
        }
    }
}

这给出了一个错误“PythagorialTriples.cpp:28: 错误:调用重载的 `pow(int&, int&)' 是不明确的”。如果我只是使用像 i*i 这样的手动电源而不是方法,就不会发生这种情况。有人可以解释一下为什么会这样吗?无论如何,我是 C++ 的新手。谢谢

最佳答案

pow 有多个重载在 <cmath> 中定义.在您的代码中,这 3 个都同样有效,因此编译器无法选择正确的一个:

        pow(float, int);
        pow(double, int);
        pow(long double, int);

最简单的解决方案是使用 static_cast在第一个参数上,消除任何歧义。例如

int side1Sqr = pow( static_cast<double>(i) ,i );
int side2Sqr = pow( static_cast<double>(a) ,a );

关于c++ - 使用 pow() 会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12500656/

相关文章:

c++ - 如何在 OSX 上获取 "codesigned"gdb?

c++ - 没有或有静态设备上下文的 OpenGL 加载纹理?

c++ - 如何在 C++ 中使用字母进行简单的数学操作数?

c# - 开发数学库

c++ - VS 2010 中 `<cmath>` header 缺少模板

c++ - Understanding floating point variables and operators in c++(也可能是书上的错误)

c++ - 依赖名称和范围

C++ if 语句替代方案

javascript - 如何提高 Math.atan() 的准确性?

c++ - C 或 C++ 中用于数字的二次方的一元运算符