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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Lutik
0 / 0 / 0
Регистрация: 12.11.2009
Сообщений: 10
#1

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

06.03.2011, 16:54. Просмотров 640. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вопрос по шаблону (C++):

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

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

Проверка ввода по шаблону - C++
Всем привет! Есть заданный шаблон, по которому пользователь должен вводить телефонный номер: (ХХХ) ХХХ-ХХ-ХХ; Как умнее и лучше всего...

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

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

Как генерировать текст по шаблону - C++
Подскажите, необходимо написать программу, генерирующую документ pdf или word. Т.е. примерно так: Имеется шаблон (кусок текста) в...

11
lemegeton
2925 / 1354 / 135
Регистрация: 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
2925 / 1354 / 135
Регистрация: 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 / 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 ?
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 / 1
Регистрация: 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 / 1
Регистрация: 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 / 1
Регистрация: 23.09.2010
Сообщений: 193
06.03.2011, 20:06 #12
MSVS2010

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

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

Создать генератор текста по шаблону - C++
Данные: flag respublica 1995 2014 хочу чтобы программа вывела на экран следующие flag1995 flagrespublica flag1995 flag2014...

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

Можно ли считать с консоли строку по шаблону? - C++
например, scanf можно считать число и записать в переменную. int n; scanf(&quot;%d&quot;, &amp;n); а если строка формата &quot;command val&quot;,...


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

Или воспользуйтесь поиском по форуму:
12
Yandex
Объявления
06.03.2011, 20:06
Ответ Создать тему
Опции темы

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