| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Ошибка C2668 при использовании шаблонов функций |
| Автор: Алексей 15.4.2007, 20:24 | ||
Здравствуйте. Это просто код из учебника.
В Borland C++ 3.1 работает отлично, а вот в Visual C++ 2005 пишет "error C2668: 'max' : ambiguous call to overloaded function. Почему так? Заранее спасибо. |
| Автор: Daevaorn 15.4.2007, 20:30 |
Компилятор не может выбрать функцию. Добавлением после дробный констант буквы f, решается проблема компиляции, но появляется другая - линковки, т.к. перегруженные функции для float и int не реализованы. |
| Автор: Xenon 15.4.2007, 20:53 | ||
Можно так по-моему сделать:
|
| Автор: bsa 15.4.2007, 21:03 |
| А смысл вводить T2, когда он не используется? Может проще убрать объявления float max(float, float) и int max(int, int)? |
| Автор: Nil 15.4.2007, 21:13 | ||||
Почему не знаю честно говоря... Но max полюбому зарезервировано... А вот почему с int не пашет не пойму..... P.S. И вообще-то действительно не вижу смысла в
|
| Автор: Xenon 15.4.2007, 21:42 |
| bsa, если просто убрать, то не соберется. Тоже будет ambiguous call to overloaded function Добавлено @ 21:44 А, доперло почему. max в std есть Вот теперь и говори, что using namespace std - не зло |
| Автор: Алексей 15.4.2007, 22:09 |
| Спасибо. И все же почему с int не работает? |
| Автор: Rockie 17.4.2007, 17:24 | ||||
Алексей, первая функция - шаблонная, компилятор сгенерирует функции для любого встроенного типа. Поэтому нет смысла перегружать функцию еще раз. А max в VS 2005 даже визуально выделяется другим цветом, то есть такая функция уже есть в стандартной библиотеке.
Добавлено через 1 минуту и 59 секунд А в данном случае вызывается функция max из std:
|
| Автор: Xenon 17.4.2007, 17:39 | ||||
Поэтому нужно делать вот так
Добавлено через 8 минут и 49 секунд Daevaorn, но если нужно специализировать, то почему бы это не делать должны образом?
|
| Автор: Rockie 17.4.2007, 17:59 | ||
Посмотрел. Это вообще - макрос
|
| Автор: Xenon 17.4.2007, 18:19 |
| Rockie, где эту ты такое посмотрел? Это функция же, iostream по крайней мере. |
| Автор: Daevaorn 17.4.2007, 18:21 | ||
у всех свои привычки и стиль |
| Автор: Nil 17.4.2007, 18:23 |
| Rockie, да я тож сначала увидел что это макрос...Но после того как #undef не помог разглядел функцию ) |