C++ 功率函数c++;错误
我正在尝试为十进制到二进制转换器创建一个帮助函数,它将告诉我根据2的最高幂从哪个位开始 这是我的代码: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&)的调用不明
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
adouble
,等等),但似乎无法让它工作
我做错了什么?对于此类参数类型,没有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中添加了更多重载。