![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Алексей |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 19.6.2006 Репутация: нет Всего: нет |
Здравствуйте. Это просто код из учебника.
В Borland C++ 3.1 работает отлично, а вот в Visual C++ 2005 пишет "error C2668: 'max' : ambiguous call to overloaded function. Почему так? Заранее спасибо. |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Можно так по-моему сделать:
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
А смысл вводить T2, когда он не используется?
Может проще убрать объявления float max(float, float) и int max(int, int)? |
|||
|
||||
| Nil |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 15.4.2007 Репутация: нет Всего: нет |
Почему не знаю честно говоря... Но max полюбому зарезервировано... А вот почему с int не пашет не пойму..... P.S. И вообще-то действительно не вижу смысла в
Это сообщение отредактировал(а) Nil - 15.4.2007, 21:15 |
||||
|
|||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
bsa, если просто убрать, то не соберется. Тоже будет ambiguous call to overloaded function
Добавлено @ 21:44 А, доперло почему. max в std есть Вот теперь и говори, что using namespace std - не зло Это сообщение отредактировал(а) Xenon - 15.4.2007, 21:45 |
|||
|
||||
| Алексей |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 19.6.2006 Репутация: нет Всего: нет |
Спасибо. И все же почему с int не работает?
|
|||
|
||||
| Rockie |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
Алексей, первая функция - шаблонная, компилятор сгенерирует функции для любого встроенного типа. Поэтому нет смысла перегружать функцию еще раз. А max в VS 2005 даже визуально выделяется другим цветом, то есть такая функция уже есть в стандартной библиотеке.
Добавлено через 1 минуту и 59 секунд А в данном случае вызывается функция max из std:
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
||||
|
|||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
В данном случае это не особо имеет значение, т.к. у стандартной функции другая сигнатура. И в списке вариантов компилятора она последняя. Ну как некий вариант специализации, перегрузка иногда полезна |
|||
|
||||
| Xenon |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Поэтому нужно делать вот так
Добавлено через 8 минут и 49 секунд Daevaorn, но если нужно специализировать, то почему бы это не делать должны образом?
|
||||
|
|||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
Посмотрел. Это вообще - макрос
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Rockie, где эту ты такое посмотрел? Это функция же, iostream по крайней мере.
|
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| Nil |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 15.4.2007 Репутация: нет Всего: нет |
Rockie, да я тож сначала увидел что это макрос...Но после того как #undef не помог разглядел функцию )
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |