Возможный дубликат:
Ошибка компилятора C ++: неоднозначный вызов перегруженной функции
просто скопировал некоторый код из pdf в C ++ Builder XE2 и Visual Studio Express 2012. Оба компилятора выдают коды ошибок о неоднозначности. Я только начал, поэтому я не знаю, что делать. Может быть, мой учебник (pdf) сейчас устарел? это называется «Учиться с ++ за 14 дней». Ну в любом случае вот скопированный код.
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <stdio.h>
#pragma hdrstop
void getSqrRoot(char* buff, int x);
int main(int argc, char** argv)
{
int x;
char buff[30];
cout << “Enter a number: “;
cin >> x;
getSqrRoot(buff, x);
cout << buff;
getch();
}
void getSqrRoot(char* buff, int x)
{
sprintf(buff, “The sqaure root is: %f”, sqrt(x));
}
Код ошибки, который я получил в C ++ Builder:
[Ошибка BCC32] SquareRoot.cpp (19): E2015 Неоднозначность между ‘std :: sqrt (float) в c: \ program files (x86) \ embarcadero \ rad studio \ 9.0 \ include \ windows \ crtl \ math.h: 266 ‘и’ std :: sqrt (long double) в c: \ program files (x86) \ embarcadero \ rad studio \ 9.0 \ include \ windows \ crtl \ math.h: 302 ‘Кроме того, кавычки в моем руководстве pdf — это символы, отличные от обычных «которые я печатаю. Они» также не совместимы с компилятором. Может быть, кто-нибудь также знает, как это исправить? Заранее спасибо.
Измените свой код следующим образом:
void getSqrRoot(char* buff, int x)
{
sprintf(buff, “The sqaure root is: %f”, sqrt((float)x));
}
Поскольку квадратный корень перегружен, функция-компилятор не имеет возможности неявного преобразования из значения int x в число с плавающей точкой или двойное значение, вам нужно сделать это напрямую.
Compiler: see sqrt(int) -> what to choose? sqrt(float)/sqrt(double) ?
Compiler: see sqrt((float)int) -> sqrt(float), ok!
Compeler: see sqrt((double)int) -> sqrt(double), ok!
Измените вашу функцию getSqrRoot на следующую
void getSqrRoot(char* buff, float x)
{
И аналогично исправьте объявление в первой строке.
Это происходит потому, что std::sqrt
это функция, которую вы используете, чтобы получить квадратный корень, может взять либо float
или double
но вы дали ему int
что приводит к путанице, поскольку компилятор теперь не знает, какую функцию вызывать.