Próbuję przekonwertować narzędzie z C na C++, więc mogę skompilować jako CLR. Jestem facetem .NET, więc jest to poza moją strefą komfortu.c do C++, utracone w tłumaczeniu
mam błąd kompilacji na następnej linii (powiedz mi, czy to nie jest wystarczająco dużo informacji):
if (qvartype[ currQ ] == FLOATING)
*range *= get_scale(currQ); /* Make range units match */
/* data units. */
currQ
jest short
. Błąd jest zdefiniowany w funkcji get_scale
. Funkcja ta jest zdefiniowana wcześniej jako:
#define get_scale(i) ((short)pow(10, (int)((long)(cat_names[ i ]))))
... która wygląda śmiesznie mi głąb typu odlewania piekła, ale nie kompilacji w C. Jednak w C++, pojawia się następujący komunikat o błędzie:
Error 374 error C2668: 'pow' : ambiguous call to overloaded function
Rozumiem, że C nie stosuje koncepcji przeciążeń, ale C++ ma, a zmienna sygnatura na tym gorącym bałaganie sprawia, że nie jest jasne, która funkcja wywołać.
Jak to naprawić? Jaki byłby właściwy sposób napisania tego w celu uzyskania maksymalnej zgodności z C++?
Minor uwaga, 'get_scale' nie jest funkcją, to makro. – Borgleader
Zestaw przeciążeń może być różny w zależności od tego, czy '#include' lub '#include ' lub oba, bez względu na to czy używasz przestrzeni nazw standardowej '' (niezalecane), a także zależy od łańcucha narzędzi. To naprawdę jest dość brzydkie. Najłatwiej zrobić, aby typy były zgodne z funkcją C 'pow()', więc funkcja C jest zawsze wybrana. –
Jeśli twoja moc 10, które musisz obliczyć, pasuje do liczby całkowitej (i wygląda na to, że to właśnie robisz), może być szybciej tylko użyć statycznej tablicy odnośników zamiast wywoływania 'pow'.I tak bym to zrobił, ponieważ istnieją pewne implementacje 'pow', które mają niewielkie błędy zaokrągleń, nawet jeśli używasz liczb całkowitych. – PaulMcKenzie