处理一个程序,我的代码中有一行给了我一些问题。我想知道这里是否有人知道如何修复这一行代码:
long long x;
srand(time(NULL));
x = rand() % 1000;
long long range = pow (2, 60*(pow(2,x)-1)) ;
每当我运行此操作时,我都会收到一条错误消息,指出存在对过载的模糊调用。
我做了一些研究,似乎与不同的类型有关(关于long long
)。我想可能有一种方法可以用不同的方式来解决这个问题,但是我不确定如何做到这一点。
有人会碰巧有什么建议可以让第二行代码工作吗?
编辑:我收到以下错误:
main1.cpp:149: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
/usr/include/architecture/i386/math.h:343: note: candidate 1: double pow(double, double)
/usr/include/c++/4.2.1/cmath:357: note: candidate 2: float std::pow(float, float)
main1.cpp:149: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
/usr/include/architecture/i386/math.h:343: note: candidate 1: double pow(double, double)
/usr/include/c++/4.2.1/cmath:357: note: candidate 2: float std::pow(float, float)
使用Luchian建议的方法出现以下错误:
main1.cpp:149: error: call of overloaded 'pow(int, long long int&)' is ambiguous
/usr/include/architecture/i386/math.h:343: note: candidates are: double pow(double, double)
/usr/include/c++/4.2.1/cmath:357: note: float std::pow(float, float)
/usr/include/c++/4.2.1/cmath:361: note: long double std::pow(long double, long double)
/usr/include/c++/4.2.1/cmath:365: note: double std::pow(double, int)
/usr/include/c++/4.2.1/cmath:369: note: float std::pow(float, int)
/usr/include/c++/4.2.1/cmath:373: note: long double std::pow(long double, int)
答案 0 :(得分:2)
pow
和float
有double
的重载版本。由于您传入long
,因此需要转换为float
或double
,但编译器不知道您想要哪一个。
尝试将2
更改为2.0
。这使它成为double
并且应该解决歧义。
答案 1 :(得分:1)
使用:
long long range = ::pow (2, 60*(::pow(2,x)-1)) ;
或
long long range = std::pow (2, 60*(std::pow(2,x)-1)) ;
答案 2 :(得分:0)
我认为错误是pow
要求第一个参数不是int
。
候选函数应该是:
(1)float pow( float base, float exp );
(2)double pow( double base, double exp );
(3)long double pow( long double base, long double exp );
你需要:
long long range = pow(2.0, 60*(pow(2.0, x)-1));
因此编译器可以知道使用double
pow
版本