Sto tentando di convertire uno strumento da C a C++ così posso compilare come CLR. Sono un ragazzo di .NET quindi questo è fuori dalla mia zona di comfort.da c a C++, perso nella traduzione
Ho un errore di compilazione nella riga seguente (ditemi se questo non è abbastanza informazioni):
if (qvartype[ currQ ] == FLOATING)
*range *= get_scale(currQ); /* Make range units match */
/* data units. */
currQ
è un short
. L'errore è definito sulla funzione get_scale
. Questa funzione è definita in precedenza come:
#define get_scale(i) ((short)pow(10, (int)((long)(cat_names[ i ]))))
... che sembra ridicolo a me, in profondità nel tipo di fusione inferno, ma non compila in C. Tuttavia, in C++, ottengo il seguente messaggio di errore:
Error 374 error C2668: 'pow' : ambiguous call to overloaded function
Capisco che C non impieghi il concetto di overload, ma C++ lo fa e la firma variabile su questo hot mess rende poco chiaro quale funzione invocare.
Come posso risolvere questo problema? Quale sarebbe il modo giusto per scrivere questo per la massima compatibilità con C++?
nota minore, 'get_scale' non è una funzione, è una macro. – Borgleader
L'insieme di sovraccarichi può anche essere diverso a seconda che tu sia "#include" o "#include " o entrambi, sia che tu stia usando namespace std; '(non raccomandato) e dipende anche dalla toolchain. È davvero brutto. La cosa più semplice da fare è far sì che i tipi corrispondano alla funzione C 'pow()', quindi la funzione C viene sempre scelta. –
Se i tuoi poteri di 10 che devi calcolare rientrano in un numero intero (e sembra che sia quello che stai facendo), potrebbe essere più veloce usare semplicemente una tabella di ricerca statica invece di chiamare 'pow'.Lo farei comunque, in quanto vi sono alcune implementazioni di 'pow' che hanno lievi errori di arrotondamento, anche se stai usando numeri interi. – PaulMcKenzie