2015-12-10 1 views
3

Я две перегруженной функции, как показано ниже:INT и поплавок в функции перегрузки

void print(int i) { ... } 
void print(float f) { ... } 

Его дает мне эту ошибку для print(1.2);:

error: call of overloaded 'print(double)' is ambiguous 

Может кто-нибудь объяснить мне, почему?

+1

Какое преобразование вы хотите? double -> int или double -> float? – Jarod42

+1

Так получилось, что C++ задает 'double-> int' одинаково допустимый для' double-> float'. Один из них мог быть лучше, чем другой, но это не было принято. – chris

+1

Попробуйте следующее: 'print (1.2f);' – ZDF

ответ

4

1.2 является двойным литералом, а не поплавком.

Поэтому компилятор требует явного значения.

1.2f будет работать как плавающий букваль.

1

Он интерпретирует 1,2 как двойной. Приведение его в поплавок решит проблему.

print (float (1.2));

+0

Ах да, это была бы хорошая идея. – Nick

+1

Плюс один, но, строго говоря, суффикс f не является литой. – Bathsheba

1

1.2 является double буквальным, что делает функцию, которую вы пытаетесь вызвать неоднозначное - это double может так же легко обрезается до float или к int. Использование лимита float (1.2f) или явно его литье решит проблему.

Смежные вопросы