Форум программистов, компьютерный форум CyberForum.ru

Вопрос по шаблону - C++

Восстановить пароль Регистрация
 
Lutik
0 / 0 / 0
Регистрация: 12.11.2009
Сообщений: 10
06.03.2011, 16:54     Вопрос по шаблону #1
Доброго времени суток!
Есть шаблон функции которая находит минимальный эллемент массива и возвращает его.
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]'
Требуется помощь!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2011, 16:54     Вопрос по шаблону
Посмотрите здесь:

C++ Поиск по шаблону * и?
C++ Как генерировать текст по шаблону
Объявить аргументы по шаблону C++
C++ Поиск по шаблону
Можно ли считать с консоли строку по шаблону? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
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, слегонца несоответствующий стандарту.
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.
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
06.03.2011, 17:26     Вопрос по шаблону #4
Цитата Сообщение от Lutik Посмотреть сообщение
А чем ваш код отличается от моего, кроме как другим типом массива?
Отсутствием синтаксической ошибки.

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

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


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

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

Проверка ввода по шаблону C++
Создать генератор текста по шаблону C++
Создать матрицу по заданному шаблону C++

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

Или воспользуйтесь поиском по форуму:
Saiberg
 Аватар для Saiberg
19 / 19 / 1
Регистрация: 23.09.2010
Сообщений: 193
06.03.2011, 20:06     Вопрос по шаблону #12
MSVS2010

http://codepad.org/ Тоже скомпилил
Yandex
Объявления
06.03.2011, 20:06     Вопрос по шаблону
Ответ Создать тему
Опции темы

Текущее время: 09:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru