Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2009, 18:09   #1
Galeodor
Новичок
Джуниор
 
Регистрация: 18.03.2009
Сообщений: 2
По умолчанию Шаблон функции

Здравствуйте, не понять свою ошибку.
Задача заключается в том, чтобы в массиве найти максимальный элемент, с помощью функции. Функция должна быть описана шаблоном.
Так вот. Данная задача не выходит.

Код:
# include <iostream.h>
const int razmer=10;
int mas[razmer]={0,1,1,-4,-3,0,0,9,0,0};

template< typename T > T func_max()
{T max=mas[0];
for (int i=0;i<razmer;i++)
if (mas[i]>max) return max=mas[i];
cout<<max;
}

void main () {
cout<<endl<<"maximaln_element po modulu = "<<func_max();
}
Компилятор тыкает носом в строку с вызовом функции и говорит:
error C2783: 'T __cdecl func_max(void)' : could not deduce template argument for 'T'

что это означает, и как конкретно с этим бороться?
Возможно есть другой способ нахождения максимального в данном случае?
Galeodor вне форума Ответить с цитированием
Старый 27.10.2009, 18:23   #2
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Шаблон функции начинается с ключевого слова template, за которым в угловых скобках следует список параметров. Затем следует объявление функции:

Код:
template< typename T >
void sort( T array[], int size );  // шаблон sort объявлен, но не определён
Код:
template< typename T >
void sort( T array[], int size )   // объявление и определение
{
  T t;
  for (int i = size - 1; i > 0; i--)
    for (int j = i; j > 0; j--)
      if (array[j] < array[j-1])
      {
        t = array[j];
        array[j] = array[j-1];
        array[j-1] = t;
      }
}
Код:
template< typename T > T func_max()
Очевидно не хватает списка аргументов
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 27.10.2009, 18:38   #3
Galeodor
Новичок
Джуниор
 
Регистрация: 18.03.2009
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Sweta Посмотреть сообщение
Очевидно не хватает списка аргументов
а если мне не надо их туда передовать? )))

то есть просто вызвать функцию..типа getch();

спасибо за пример, попробую.
Galeodor вне форума Ответить с цитированием
Старый 27.10.2009, 21:33   #4
FPU128bit
Пользователь
 
Регистрация: 27.10.2009
Сообщений: 11
По умолчанию

Да есть такая проблема, что компилятор не может вычислить тип шаблона по возвращаемому параметру, ибо перегрузка функции по возвращаемому параметру запрещена. По видимому это связано с неявным приведением типов.
FPU128bit вне форума Ответить с цитированием
Старый 27.10.2009, 22:00   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Galedor
Код:
# include <iostream.h>
const int razmer=10;
int mas[razmer]={0,1,1,-4,-3,0,0,9,0,0};

template< typename T > T func_max()
{T max=mas[0];
for (int i=0;i<razmer;i++)
if (mas[i]>max) return max=mas[i];
cout<<max;
}

void main () {
cout<<endl<<"maximaln_element po modulu = "<<func_max();
}
Вы массив объявили как int, а работать с ним хотите как с произвольным типом? так не получится
Цитата:
Сообщение от FPU128bit
Да есть такая проблема, что компилятор не может вычислить тип шаблона по возвращаемому параметру, ибо перегрузка функции по возвращаемому параметру запрещена. По видимому это связано с неявным приведением типов.
можно объявить шаблон функции, которая будет возвращать разные типы в зависимости от полученного T
Код:
template< class T >
T f()
{
    return T(49);
}
Но тогда при вызове нужно явно указывать тип, который следует подставлять в шаблон:
Код:
f<int>();
Собственно это же касается и кода ТС, если хочется, чтобы хотя бы просто скомпилировалось следует заменить func_max() на func_max<int>()
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ Шаблон функции napanin Общие вопросы C/C++ 1 11.06.2009 19:07
С++ Шаблон функции napanin Помощь студентам 0 11.06.2009 18:53
Шаблон класса androidvsu Общие вопросы C/C++ 2 26.04.2009 11:57
Шаблон функции liver1981 Общие вопросы C/C++ 4 03.04.2009 17:35
Шаблон функции срвнения. Определить тип. Иллидан Общие вопросы C/C++ 3 30.05.2008 00:44