请看下面的代码
#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/