С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Lutik
0 / 0 / 0
Регистрация: 12.11.2009
Сообщений: 10
1

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

06.03.2011, 16:54. Просмотров 680. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2011, 16:54
Ответы с готовыми решениями:

Поиск по шаблону * и?
Здраствуите можете помочь с малеьким таки заданием ,я пытался еа куралесить ну...

Поиск по шаблону
При реализации поиска по шаблону столкнулся со следующей проблемой: Шаблон:...

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

Объявить аргументы по шаблону
Доброго времени суток Задача весьма расплывчатая: нужно объявить функцию, или...

[OpenCV] Поиск по шаблону
Добрый день, имеется код с robocraft, в котором используется функция...

11
lemegeton
2935 / 1364 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
06.03.2011, 17:05 2
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
Lutik
0 / 0 / 0
Регистрация: 12.11.2009
Сообщений: 10
06.03.2011, 17:16  [ТС] 3
Цитата Сообщение от 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
2935 / 1364 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
06.03.2011, 17:26 4
Цитата Сообщение от Lutik Посмотреть сообщение
А чем ваш код отличается от моего, кроме как другим типом массива?
Отсутствием синтаксической ошибки.

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

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


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

Может, где-то в остальном коде есть ответ? Вряд-ли, конечно, скорее всего очередной косяк MSVC.
Другого кода нет=) Мэйн+шаблон.
0
Saiberg
19 / 19 / 2
Регистрация: 23.09.2010
Сообщений: 193
06.03.2011, 17:40 6
Лично мне не понятно как это должно работать.
в 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
Lutik
0 / 0 / 0
Регистрация: 12.11.2009
Сообщений: 10
06.03.2011, 18:08  [ТС] 7
Цитата Сообщение от 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
19 / 19 / 2
Регистрация: 23.09.2010
Сообщений: 193
06.03.2011, 18:17 8
ну да. только мне кажется он сам не узнает его размер. могу ошибаться, т.к. тот код впринцепи работает и правильно. Насчет значения i глючил отладчик наверное. 4 итерации выполняется, т.е. все правильно.
0
Lutik
0 / 0 / 0
Регистрация: 12.11.2009
Сообщений: 10
06.03.2011, 18:27  [ТС] 9
Цитата Сообщение от Saiberg Посмотреть сообщение
ну да. только мне кажется он сам не узнает его размер. могу ошибаться, т.к. тот код впринцепи работает и правильно. Насчет значения i глючил отладчик наверное. 4 итерации выполняется, т.е. все правильно.
Так у вас мой код компилится без ошибок?
0
Saiberg
19 / 19 / 2
Регистрация: 23.09.2010
Сообщений: 193
06.03.2011, 19:05 10
да.....
0
Lutik
0 / 0 / 0
Регистрация: 12.11.2009
Сообщений: 10
06.03.2011, 19:29  [ТС] 11
Цитата Сообщение от Saiberg Посмотреть сообщение
да.....
А каким компилятором вы пользуетесь?
0
Saiberg
19 / 19 / 2
Регистрация: 23.09.2010
Сообщений: 193
06.03.2011, 20:06 12
MSVS2010

http://codepad.org/ Тоже скомпилил
0
06.03.2011, 20:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2011, 20:06

Создать генератор текста по шаблону
Данные: flag respublica 1995 2014 хочу чтобы программа вывела на экран...

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

Создать матрицу по заданному шаблону
Ребят кому не тяжело, помогите пожалуйста написать программу В общем нужно...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru