Tôi đang gặp một số sự cố khi chạy mã sau. Tôi nhận được điều này: lỗi C2668: 'pow': cuộc gọi mơ hồ đến chức năng quá tải. Tôi đã cố gắng để tự đúc các đối số cho loại appropiate bằng cách sử dụng static_cast, tuy nhiên tôi nghĩ rằng tôi nhận được một số lỗi con trỏ ?!Cuộc gọi mơ hồ đến chức năng quá tải 'pow'
Chương trình nên chuyển đổi một số từ cơ sở 16 căn 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();
}
Đó là tất cả các lỗi.
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 ==========
Làm cách nào để khắc phục sự cố này? Cảm ơn bạn.
Bạn không thực sự cần 'pow()' ở tất cả ở đây, bạn có thể sử dụng thay đổi, khi bạn đang exponentiating một sức mạnh của hai. – EJP
Đây là mã C được biên dịch thành C++. Trình biên dịch của bạn chỉ có một chút rối loạn nhận dạng phân ly. Chọn một ngôn ngữ và dính vào nó. –
@Stefan: Bạn nên thử thay đổi dòng có nội dung '#include' thành '#include '. Điều đó có thể nhận quá tải 'C++ 11' của' pow() 'có các đối số không tách rời. –
Blastfurnace