Domanda

Così mi rendo conto che #include è necessaria, e che ci sia un pow (x, y), dove x ^ y opere ... ma quando ho tentato di usare pow (2, (num-1)), è preso a calci indietro un errore ...

errorC2668: 'pow': chiamata ambigua alla funzione

la riga di codice che ho per essa è la seguente

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

Tutti i consigli?

Grazie in anticipo

EDIT:

num è infatti dichiarato come un int.

num ha un valore, inizia a 1 e va a UINT_MAX

Aggiunto un asterisco all'equazione

È stato utile?

Soluzione

Il compilatore non sa quale funzione chiamare pow (). I sovraccarichi elencati qui ha pronunciato la seguente 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 );

Il compilatore non indovinare quale usare. Rendere più esplicito con calchi.

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

Ci possono essere alcuni calchi in più là, ma non sarà male a nessuno.

Altri suggerimenti

Queste sono le funzioni pow() consentite in C ++. Il problema è che il codice ha un int come primo argomento e C ++ non so se per la promozione ad una doppia doppia o lungo.

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

Prova a mettere in (double)2 invece di 2.

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

Aggiungi moltiplicazione mancante (o quello che volete) e anche ci dovrebbe essere punto e virgola alla fine della riga:

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

errore C2668: 'pow': chiamata ambigua alla funzione in VC ++ 2005 solo , alex.m ha scritto,

  

"pow" (sovraccarichi) prende un galleggiante   numero di tipo punto (singolo, doppio o   lungo doppia precisione) come prima   argomentazione, non un numero intero. Questo è   dove l'errore proviene, dal momento che la   compilatore non può indovinare il modo in cui si desidera   il vostro intero lungo da convertire.

     

Basta provare a scrivere un'espressione cast,   in questo modo:

     

Blocco di codice

     

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

Quindi, se si tenta pow((double)2,(num-1)), dovrebbe funzionare.


Divertente nota a margine, come ho digitato l'inizio di esso in Google, "pow chiamata ambigua alla funzione" è venuto in su come la parte superiore ha suggerito di ricerca.

Ricorda che puoi anche scrivere potenze intere di 2 con un operatore di spostamento:

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

ldexp (incluso anche da <cmath>):

double perfect = ldexp(1.0, num-1) * (ldexp(1.0, num) - 1);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top