двусмысленность квадратный корень

Возможный дубликат:
Ошибка компилятора 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 ‘
Полный контекст парсера
SquareRoot.cpp (18): разбор: void getSqrRoot (char *, int)

Кроме того, кавычки в моем руководстве pdf — это символы, отличные от обычных «которые я печатаю. Они» также не совместимы с компилятором. Может быть, кто-нибудь также знает, как это исправить? Заранее спасибо.

1

Решение

Измените свой код следующим образом:

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!
2

Другие решения

Измените вашу функцию getSqrRoot на следующую

void getSqrRoot(char* buff, float x)
{

И аналогично исправьте объявление в первой строке.

Это происходит потому, что std::sqrt это функция, которую вы используете, чтобы получить квадратный корень, может взять либо float или double но вы дали ему int что приводит к путанице, поскольку компилятор теперь не знает, какую функцию вызывать.

0

По вопросам рекламы [email protected]