C++ 功率函数c++;错误

C++ 功率函数c++;错误,c++,pow,C++,Pow,我正在尝试为十进制到二进制转换器创建一个帮助函数,它将告诉我根据2的最高幂从哪个位开始 这是我的代码: int determineStart(int val){ int topval = 1; int i = 0; for(i = 0; val > 2 * topval; ++i){ topval = pow(2, i); } return topval; } 我得到以下错误: main.cpp:9:错误:重载pow(int,int&)的调用不明

我正在尝试为十进制到二进制转换器创建一个帮助函数,它将告诉我根据2的最高幂从哪个位开始

这是我的代码:

int determineStart(int val){
   int topval = 1;
   int i = 0;
   for(i = 0; val > 2 * topval; ++i){
      topval = pow(2, i);
   }
   return topval;
}
我得到以下错误:
main.cpp:9:错误:重载pow(int,int&)的调用不明确

我试过切换一些东西(比如输入一个
double
或一个单独的变量作为
pow()
的第二个参数,使
topval
a
double
,等等),但似乎无法让它工作

我做错了什么?

对于此类参数类型,没有
pow()
函数。它可以是
(float,int)
(double,int)
(long double,int)
。如果用
(int,int)
调用它,编译器不知道上面使用的是哪种类型。最简单的解决方案是:

pow(2.0, i)
编辑: 我假设您使用了

中的标准
pow()
定义,对于此类参数类型没有
pow()
函数。它可以是
(float,int)
(double,int)
(long double,int)
。如果用
(int,int)
调用它,编译器不知道上面使用的是哪种类型。最简单的解决方案是:

pow(2.0, i)
编辑: 我假设您使用标准的
pow()
定义,从
获得二次幂的最简单(也是最快)方法是移位-CPU使用的是二进制,因此它可以在末尾为您添加一些额外的零

因此,您可以编写
(1而不是
pow(2,i)
,获得二次幂的最简单(也是最快)方法是移位-CPU使用二进制,因此它可以在末尾为您添加一些额外的零


因此,您可以编写
(1强制转换,而不是
pow(2,i)
,这可能是您的错误:您可以轻松地将int强制转换为double或float。 试试这个:

pow(2.0, i)
它将表现为:

pow((double)(2), i)

强制转换可能是您的错误:您可以轻松地将int转换为double或float。 试试这个:

pow(2.0, i)
它将表现为:

pow((double)(2), i)

程序中是否有其他
pow
定义?请发布完整的程序中是否有其他
pow
定义?请发布完整的程序我使用Visual Studio 2010,但我收到错误:对重载函数的调用不明确。@ShikharBhardwaj在C++11中添加了更多重载。我使用Visual Studio 2010,并且获取错误:对重载函数的调用不明确。@ShikharBhardwaj在C++11中添加了更多重载。