请查看以下代码
#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;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误"PythagorialTriples.cpp:28:错误:调用重载的`pow(int&,int&)'是不明确的".如果我只使用像i*i这样的手动电源而不是方法,就不会发生这种情况.有人可以解释一下为什么会这样吗?无论如何,我是C++的新手.谢谢
pow定义中有多个重载<cmath>.在你的代码中,这三个都是同等有效的,因此编译器在选择正确的代码时遇到了麻烦:
pow(float, int);
pow(double, int);
pow(long double, int);
Run Code Online (Sandbox Code Playgroud)
最简单的解决方案是static_cast在第一个参数上使用,以消除任何歧义.例如
int side1Sqr = pow( static_cast<double>(i) ,i );
int side2Sqr = pow( static_cast<double>(a) ,a );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10892 次 |
| 最近记录: |