所以,我意识到的#include是必要的,而且是有POW(X,Y),其中x ^ÿ作品......但是当我试图使用POW(2,(NUM-1)),把它踢到回一个错误...

errorC2668: 'POW':给重载函数暧昧呼叫

我有它的代码的行如下

perfect = (pow(2,(num-1))) * (pow(2,num)-1);

任何建议?

在预先感谢

编辑:

NUM确实声明为一个int。

NUM确实有一个值,在1开始,并且前进到UINT_MAX

加星号等式

有帮助吗?

解决方案

编译器不知道哪个POW()函数调用。重载列出此处给出下面的列表:

      float pow (       float base,       float exponent );
     double pow (      double base,      double exponent );
long double pow ( long double base, long double exponent );
      float pow (       float base,         int exponent );
     double pow (      double base,         int exponent );
long double pow ( long double base,         int exponent );

编译器不会猜测使用哪一个。使其明确了石膏。

perfect = (pow(2.,(double)(num-1))) < (pow(2.,(double)num)-1);

有可能会出现一些额外蒙上那里,但他们不会伤害任何东西。

其他提示

这些是在C ++中允许pow()功能。的问题是,您的代码有一个int作为第一个参数和C ++不知道是否将其提升到一个双重或双长

     double pow (      double base,      double exponent );
long double pow ( long double base, long double exponent );
      float pow (       float base,       float exponent );
     double pow (      double base,         int exponent );
long double pow ( long double base,         int exponent );

尝试把在(double)2而不只是2的。

perfect = (pow((double)2,(num-1))) * (pow((double)2,num)-1)

添加缺少的乘法(或你想要的),也应在该行的末尾分号:

perfect = (pow(2,(num-1))) * (pow(2,num)-1) ;

错误C2668: 'POW':暧昧呼叫到在VC ++ 2005重载函数仅,alex.m写道,

  

“POW”(任何过载)采用浮动   点类型号(单,双或   长双精度)作为第一   参数,而不是一个整数。这是   当错误来自,由于   编译器不能猜你所希望的方式   您的长整型转换。

     

只要尝试写入转换表达式,   像这样:

     

代码块

     

C =   POW((双)numberOfScansCompleted,   2);

所以,如果你尝试pow((double)2,(num-1)),它应该工作。


好玩侧面说明,我输入它的开始到谷歌,“战俘暧昧调用重载函数”来到了作为顶级建议的搜索。

记住,也可以写的2的整数幂与一个移位运算符:

int perfect = (1<<(num-1)) * ((1<<num) - 1);

或者与 ldexp (也包括从<cmath>):

double perfect = ldexp(1.0, num-1) * (ldexp(1.0, num) - 1);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top