다음 코드를 실행하는 데 문제가 있습니다. 나는 이것을 가지고있다 : 오류 C2668 : 'pow': 오버로드 된 함수에 모호한 호출. static_cast를 사용하여 적절한 형식으로 인수를 수동으로 캐스팅하려고 시도했지만 일부 포인터 오류가 발생합니다.오버로드 된 함수 'pow'에 대한 모호한 호출
이 프로그램은 10
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <math.h>
//base 16 to base 10
int convert(char *n){
int result = 0;
for (int i = strlen(n) - 1; i >= 0; i--){
if (n[i] >= 'a')
result += (n[i] - 'a' + 10)* pow(16, strlen(n) - i - 1);
else
if (n[i] >= 'A')
result += (n[i] - 'A' + 10)* pow(16, strlen(n) - i - 1);
else
if (n[i] >= '0')
result += (n[i] - '0')* pow(16, strlen(n) - i - 1);
}
return result;
}
void main(void){
char n[10];
printf("Introduceti numarul: "); scanf("%s", n);
printf("Numarul in baza 10 este: %d", convert(n));
_getch();
}
사람들은 모든 오류입니다 기지로 기수 16의 숫자를 변환해야합니다.
1>------ Build started: Project: pr8, Configuration: Debug Win32 ------
1> pr8.cpp
1> error C2668: 'pow' : ambiguous call to overloaded function
1> could be 'long double pow(long double,int) throw()'
1> or 'long double pow(long double,long double) throw()'
1> or 'float pow(float,int) throw()'
1> or 'float pow(float,float) throw()'
1> or 'double pow(double,int) throw()'
1> or 'double pow(double,double)'
1> while trying to match the argument list '(int, size_t)'
1>'-' : pointer can only be subtracted from another pointer
1> error C2668: 'pow' : ambiguous call to overloaded function
1> could be 'long double pow(long double,int) throw()'
1> or 'long double pow(long double,long double) throw()'
1> or 'float pow(float,int) throw()'
1> or 'float pow(float,float) throw()'
1> or 'double pow(double,int) throw()'
1> or 'double pow(double,double)'
1> while trying to match the argument list '(int, size_t)'
1> error C2668: 'pow' : ambiguous call to overloaded function
1> could be 'long double pow(long double,int) throw()'
1> or 'long double pow(long double,long double) throw()'
1> or 'float pow(float,int) throw()'
1> or 'float pow(float,float) throw()'
1> or 'double pow(double,int) throw()'
1> or 'double pow(double,double)'
1> while trying to match the argument list '(int, size_t)'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
어떻게 해결할 수 있습니까? 고맙습니다.
여기서'pow()'는 실제로 필요하지 않습니다. 2의 거듭 제곱을 지님에 따라 시프트를 사용할 수 있습니다. – EJP
이것은 C++로 컴파일되는 C 코드입니다. 귀하의 컴파일러는 단지 약간의 해체 정체성 장애가 있습니다. 하나의 언어를 고르고 그것에 충실하십시오. –
@Stefan :'#include'을'#include '으로 변경해야합니다. 그것은 완전한 인수를 취하는'pow()'의'C++ 11' 오버로딩을 픽업 할 것입니다. –
Blastfurnace