Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 12.11.2009
Сообщений: 10

Вопрос по шаблону

06.03.2011, 16:54. Показов 1022. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Есть шаблон функции которая находит минимальный эллемент массива и возвращает его.
C++
1
2
3
4
5
6
7
8
9
template <typename Any, int size>
Any Min(Any (&mas)[size])
{
    Any minval=mas[0];
    for(int i=0; i<sz; i++)
        if(mas[i]<minval)
            minval = mas[i];
    return minval;
}
При вызове из main
C++
1
2
int arr[]={4,3,2,1};
Min(arr);
возникает следущая ошибка
error C2784: 'Any Min(Any [size])' : could not deduce template argument for 'Any [size]' from 'int [4]'
Требуется помощь!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.03.2011, 16:54
Ответы с готовыми решениями:

Вопрос по шаблону сайта
Вот к примеру я создал макет сайта, у меня он делится допустим на 5 блоков, шапка лево право низ и середина. У меня к примеру есть...

Вопрос по шаблону MDI-приложения
Если создать MDI-приложение через File-&gt;New-&gt;Other-&gt;Projects-&gt;MDI Application, то появится готовый шаблон. В нем я не могу понять...

Замена текста по шаблону и удаление внешних тегов, относящихся к найденному шаблону
Привет всем, Есть небольшой html файл в котором надо искать вот такие шаблоны: @130, @131, @132 ... (т.е. @ + 3 цифры) и заменить,...

11
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
06.03.2011, 17:05
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <cstdio>
 
template <typename Any, int size>
Any Min(Any (&array)[size]) {
  Any result = array[0];
  for (int i = 1; i < size; ++i)
    if (array[i] < result)
      result = array[i];
  return result;
}
 
int main(int argc, char *argv[]) {
  char s[] = { 'a', 'c', 'd', 'f', 'a' } ;
  printf("%c\n", Min(s));
  return 0;
}
Добавлено через 3 минуты
Если мой вариант не компилируется, возможно, используется VC6, слегонца несоответствующий стандарту.
0
0 / 0 / 0
Регистрация: 12.11.2009
Сообщений: 10
06.03.2011, 17:16  [ТС]
Цитата Сообщение от lemegeton Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <cstdio>
 
template <typename Any, int size>
Any Min(Any (&array)[size]) {
  Any result = array[0];
  for (int i = 1; i < size; ++i)
    if (array[i] < result)
      result = array[i];
  return result;
}
 
int main(int argc, char *argv[]) {
  char s[] = { 'a', 'c', 'd', 'f', 'a' } ;
  printf("%c\n", Min(s));
  return 0;
}
Добавлено через 3 минуты
Если мой вариант не компилируется, возможно, используется VC6, слегонца несоответствующий стандарту.
А чем ваш код отличается от моего, кроме как другим типом массива?=) Аналогичная ошибка.
Использую Visual studio 2008.
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
06.03.2011, 17:26
Цитата Сообщение от Lutik Посмотреть сообщение
А чем ваш код отличается от моего, кроме как другим типом массива?
Отсутствием синтаксической ошибки.

Цитата Сообщение от Lutik Посмотреть сообщение
Аналогичная ошибка.
Странно это. gcc собирает наотличненько.

Может, где-то в остальном коде есть ответ? Вряд-ли, конечно, скорее всего очередной косяк MSVC.
0
0 / 0 / 0
Регистрация: 12.11.2009
Сообщений: 10
06.03.2011, 17:40  [ТС]
Цитата Сообщение от lemegeton Посмотреть сообщение
Отсутствием синтаксической ошибки.


Странно это. gcc собирает наотличненько.

Может, где-то в остальном коде есть ответ? Вряд-ли, конечно, скорее всего очередной косяк MSVC.
Другого кода нет=) Мэйн+шаблон.
0
 Аватар для Saiberg
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
06.03.2011, 17:40
Лично мне не понятно как это должно работать.
в MSVS2010 собиратся , НО

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
template <typename T, int size>
T Min(T (&array)[size]) 
{
  T result = array[0];
  int i = size;
// i = 0x0ccccccc
  for (int i = 1; i < size; ++i)
    if (array[i] < result)
      result = array[i];
 
  return result;
}
 
int main(int argc, char *argv[]) {
  char s[] = { 'a', 'c', 'd', 'f', 'a' } ;
  printf("%c\n", Min(s));
 
  system("pause");
  return 0;
}
тоесть цикл как минимум будет молотить много лишних итераций.

новерное так нужно
C++
1
Min<char*, sizeof(s)>(s);
а как он вообще выводит второй аргумент(не уверен что правильно выразился) int size ?
0
0 / 0 / 0
Регистрация: 12.11.2009
Сообщений: 10
06.03.2011, 18:08  [ТС]
Цитата Сообщение от Saiberg Посмотреть сообщение
Лично мне не понятно как это должно работать.
в MSVS2010 собиратся , НО

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
template <typename T, int size>
T Min(T (&array)[size]) 
{
  T result = array[0];
  int i = size;
// i = 0x0ccccccc
  for (int i = 1; i < size; ++i)
    if (array[i] < result)
      result = array[i];
 
  return result;
}
 
int main(int argc, char *argv[]) {
  char s[] = { 'a', 'c', 'd', 'f', 'a' } ;
  printf("%c\n", Min(s));
 
  system("pause");
  return 0;
}
тоесть цикл как минимум будет молотить много лишних итераций.

новерное так нужно
C++
1
Min<char*, sizeof(s)>(s);
а как он вообще выводит второй аргумент(не уверен что правильно выразился) int size ?
Изначально все было так
C++
1
2
3
4
5
6
7
8
9
template <typename Any, int size>
Any Min(Any (&mas)[size])
{
        Any minval=mas[0];
        for(int i=0; i<sz; i++)
                if(mas[i]<minval)
                        minval = mas[i];
        return minval;
}
При вызове из main
Код C++
C++
1
2
int arr[]={4,3,2,1};
Min(arr);
size имеится ввиду количество эллементов масива.
Если я напишу так
C++
1
Min<char*, sizeof(s)>(s);
То как толк от шаблона, я так понимаю он долден сам ухватывать тип масива arr?
0
 Аватар для Saiberg
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
06.03.2011, 18:17
ну да. только мне кажется он сам не узнает его размер. могу ошибаться, т.к. тот код впринцепи работает и правильно. Насчет значения i глючил отладчик наверное. 4 итерации выполняется, т.е. все правильно.
0
0 / 0 / 0
Регистрация: 12.11.2009
Сообщений: 10
06.03.2011, 18:27  [ТС]
Цитата Сообщение от Saiberg Посмотреть сообщение
ну да. только мне кажется он сам не узнает его размер. могу ошибаться, т.к. тот код впринцепи работает и правильно. Насчет значения i глючил отладчик наверное. 4 итерации выполняется, т.е. все правильно.
Так у вас мой код компилится без ошибок?
0
 Аватар для Saiberg
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
06.03.2011, 19:05
да.....
0
0 / 0 / 0
Регистрация: 12.11.2009
Сообщений: 10
06.03.2011, 19:29  [ТС]
Цитата Сообщение от Saiberg Посмотреть сообщение
да.....
А каким компилятором вы пользуетесь?
0
 Аватар для Saiberg
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
06.03.2011, 20:06
MSVS2010

http://codepad.org/ Тоже скомпилил
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.03.2011, 20:06
Помогаю со студенческими работами здесь

По шаблону
Доброго времени суток. Есть txt файл Moscow Bandung Vitebsk И есть шаблон: data;Moscow(сама...

Вопрос по SetParent (поэтому, наверное, это вопрос к NickStaves)
Есть набор форм, назовём их 'интерфейсными'. Есть отдельная форма, назовём её 'хранилищем'. Сама по себе она нигде не используется: лишь...

Верстка по шаблону
Всем привет... Занялся с разработкой сайта, возникли проблемы с версткой шаблона... есть лишь дизайн сайт... как правильно предусмотереть...

Поиск по шаблону
При реализации поиска по шаблону столкнулся со следующей проблемой: Шаблон: *abc Тест1: abc Тест2: fabc Тест3: ssabk_abc Первые...

Совет по шаблону
Доброго всем времени суток!Помогите новичку,кому не трудно!Скачал шаблон,меняю его под свои нужды,столкнулся с такой проблемой: не могу по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru