Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с использованием простого шаблона функции, Создан простой шаблон функции max(a,b) 
V
    Опции темы
Zubilo
Дата 5.12.2007, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 13.11.2007
Где: Химки

Репутация: нет
Всего: нет



Доброго времени суток!
   Искал схожую проблему - не нашел. Учу С++, пишу под Линукс (Мандрива 2007).
Взял из книжки пример создания простого шаблона функции, все вроде как правильно, но при компиляции выдает ошибку:
 
Код
 
undefined reference to `max(int, int)'

Вот код:
Код


#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <iostream>
#include <cstdlib>

using namespace std;
template<class T>
   T max(T a, T b) { return a>b?a:b; }

int max(int,int);

int main(int argc, char *argv[])
 { 
    cout << "Max 3 and 4 : "<< max(3,4) << endl; 
    return EXIT_SUCCESS;
}

Подскажите, пожалуйста, в чем ошибка?

Это сообщение отредактировал(а) Zubilo - 5.12.2007, 23:54
PM MAIL   Вверх
zkv
Дата 6.12.2007, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



этим:
Цитата(Zubilo @  5.12.2007,  23:53 Найти цитируемый пост)
int max(int,int);

ты что хотел сказать?
выкини нафик и все заработает;

а это:
Цитата(Zubilo @  5.12.2007,  23:53 Найти цитируемый пост)
using namespace std;

нехорошо.
PM MAIL   Вверх
Zubilo
Дата 6.12.2007, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 13.11.2007
Где: Химки

Репутация: нет
Всего: нет



Цитата

    
этим:
Код

int max(int,int);

ты что хотел сказать?
выкини нафик и все заработает;

этим я, вроде как, создаю прототип функции типа int. 

вот только что выкинул. получил вот что:
Код

 error: call of overloaded ‘max(int, int)’ is ambiguous
note: candidates are: T max(T, T) [with T = int]
note: const _Tp& std::max(const _Tp&, const _Tp&) [with _Tp = int]

чем это нехорошо, это KDEDevelop сам добавляет при создании проекта?
Цитата

  а это:
Код

 using namespace std;



нехорошо.

PM MAIL   Вверх
zkv
Дата 6.12.2007, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(Zubilo @  6.12.2007,  00:07 Найти цитируемый пост)
чем это нехорошо,

сейчас из-за этого ты получил ошибку ;)

ты открыл пространство имен std, а там есть шаблонная функция const _Tp& std::max(const _Tp&, const _Tp&) о чем тебе рассказал компилятор, в итоге он не может определиться, что же ему использовать

почувствуй разницу:
Код

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <iostream>
#include <cstdlib>

template<class T>
   T max(T a, T b) { return a>b?a:b; }

int main(int argc, char *argv[])
 { 
    std::cout << "Max 3 and 4 : "<< max(3,4) << std::endl; 
    return EXIT_SUCCESS;
}


Это сообщение отредактировал(а) zkv - 6.12.2007, 00:16
PM MAIL   Вверх
Zubilo
Дата 6.12.2007, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 13.11.2007
Где: Химки

Репутация: нет
Всего: нет



Странно... убрал и получил сообщение что он незнает оператора конца строки и вывода в поток, хотя объявлены, вроде как все бошко файлы(#include <iostream>, #include <cstdlib>)

Код

error: ‘cout’ was not declared in this scope
 error: ‘endl’ was not declared in this scope


Добавлено через 3 минуты и 51 секунду
zkv, огромное тебе спасибо!!!
Код, который ты привел, арбайтен. То есть получается, что я для примера плохое название  функции выбрал для своего первого шаблона....
Терь все работает!
PM MAIL   Вверх
nickless
Дата 6.12.2007, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Zubilo, посмотри внимательно:

Цитата(zkv @  5.12.2007,  22:11 Найти цитируемый пост)
std::cout

Цитата(zkv @  5.12.2007,  22:11 Найти цитируемый пост)
std::endl;



--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
Zubilo
Дата 6.12.2007, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 13.11.2007
Где: Химки

Репутация: нет
Всего: нет



Ага smile вижу, вижу.
Сменил название функции с max на my_max и оставил using namespace std;
Все работает. Всем еще раз спасибо!
PM MAIL   Вверх
zkv
Дата 6.12.2007, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(Zubilo @  6.12.2007,  00:15 Найти цитируемый пост)
То есть получается, что я для примера плохое название  функции выбрал для своего первого шаблона....

неправильно мыслишь. 
имя нужно выбирать руководствуясь здравым смыслом, правильностью имени согласно стандарта языка и стандарта кодирования твоей команды. 
А конфликты имен легко разрешаются пространствами имен, для чего они и были созданы.

Добавлено через 51 секунду
а это:
Цитата(Zubilo @  6.12.2007,  00:24 Найти цитируемый пост)
оставил using namespace std;

неправильный подход и плохой стиль.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0488 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.