Pregunta

Así que me di cuenta de que # include es necesario, y que no es un pow (x, y), donde x ^ Y las obras ... pero cuando me trató de utilizar pow (2, (num-1)), se iniciaron volver un error ...

errorC2668: 'prisionero de guerra': llamada ambigua a función sobrecargada

la línea de código que tengo para es como sigue

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

¿Alguna recomendación?

Gracias de antemano

EDIT:

num se declara de hecho, como un int.

num tiene un valor, comienza a 1 y se va a UINT_MAX

Se ha añadido un asterisco a la ecuación

¿Fue útil?

Solución

El compilador no sabe qué función pow () para llamar. Las sobrecargas que aparece aquí da la siguiente lista:

      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 );

El compilador no va a adivinar cuál de ellos utilizar. Hacerla explícita con yesos.

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

Puede haber algunos moldes adicionales allí, pero no va a doler nada.

Otros consejos

Estas son las funciones pow() permitidas en C ++. El problema es que el código tiene un entero como primer argumento y C ++ no sé si para promover a un doble doble o larga.

     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 );

Trate de poner en (double)2 en lugar de sólo 2.

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

Añadir multiplicación faltante (o lo que quiere) y también debería ser punto y coma al final de la línea:

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

C2668 de error: 'prisionero de guerra': llamada ambigua a función sobrecargada en VC ++ 2005, sólo , alex.m escribió:

  

"prisionero de guerra" (ninguna sobrecarga) toma una flotación   número de tipo de punto (simple, doble o   larga de doble precisión) como primera   argumento, no es un entero. Esto es   donde el error viene, ya que la   compilador no puede adivinar la forma que desee   su entero largo a convertir.

     

Solo trata de escribir una expresión de conversión,   de esta manera:

     

bloque de código

     

c =   pow ((doble) numberOfScansCompleted,   2);

Por lo tanto, si se intenta pow((double)2,(num-1)), que debería funcionar.


nota divertida, mientras escribía el inicio de la misma en Google, "prisionero de guerra llamada ambigua a función sobrecargada" surgió como la parte superior sugirió búsqueda.

Recuerde que también puede escribir potencias enteras de 2 con un operador de desplazamiento:

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

ldexp (también incluido desde <cmath>):

double perfect = ldexp(1.0, num-1) * (ldexp(1.0, num) - 1);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top