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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.61
Gregory_Mas
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 26
#1

Шаблон структуры - C++

14.10.2012, 08:58. Просмотров 6221. Ответов 26
Метки нет (Все метки)

можно ли в с++ создать шаблон структуры? Не класса, именно структуры.

Т.е. есть у меня
struct A
{
float e;
float e1;
};

И то же самое, но с int'ами. Могу сделать обобщенную структуру? И как?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2012, 08:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблон структуры (C++):

Шаблон структуры - C++
Создать шаблон структуры "владелец автомобиля" со следующими полями : фамилия, имя, номер автомобиля, дата постановки на учет(структура -...

Шаблон структуры данных - C++
Задание на курсовую работу: шаблон структуры данных – массив указателей на заголовки списков. Элемент списка содержит указатель на объект....

Шаблон структуры данных - C++
Всем привет, в универе дали задание, не понимаю совсем, напишите пожалуйста, Разработать шаблоны структуры данных в памяти. Тип...

Как работает шаблон структуры static_assert? - C++
Всем привет, объясните пожалуйста подробно почему данный код не компилируется? #include <iostream> template<bool> ...

Шаблон функции, использующий поля структуры - C++
В очередной раз у меня возникают проблемы с доступом к полям структуры, и на этот раз уже в функции. У меня есть две (ну, на самом деле...

Шаблон структуры данных - массив указателей на заголовки списков - C++
Мне выдали задание на курсовую работу: "Шаблон структуры данных - массив указателей на заголовки списков. Элемент списка содержит...

26
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
14.10.2012, 12:40 #16
в строке 79 неоднозначный вывод.
компилятор пытается сам вывести аргументы шаблонной функции по аргументам в месте вызова.
а там второй параметр имеет тип int, а последний - матрица флоатов. поэтому для вывода одинакого хорошо подходят и int и float. т.е. имеем неоднозначность. нужно явно указать тип. скорее всего вам там нужен фломат. можно так:

C++
1
2
3
4
5
B=rec(i,0.0f,0,m1);
или
B=rec<float>(i,0,0,m1);
или
B=rec(i,float(0),0,m1);
1
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.10.2012, 12:47 #17
Цитата Сообщение от DU Посмотреть сообщение
в строке 79 неоднозначный вывод.
Gregory_Mas, я же специально поменял float на double, чтобы не было этой ошибки:
C++
1
2
3
4
5
int m[N];
double m1[N];
...
 A <double> D;
...
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
14.10.2012, 12:50 #18
да у вас в коде функция rec принимает только один шаблонный параметр. там неоднозначностей вообще не будет никаких. но у ТС совсем другая сигнатура функции и вот в том коде ошибки такие могут быть.
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.10.2012, 13:09 #19
Цитата Сообщение от DU Посмотреть сообщение
да у вас в коде функция rec принимает только один шаблонный параметр. там неоднозначностей вообще не будет никаких. но у ТС совсем другая сигнатура функции и вот в том коде ошибки такие могут быть.
Да, вы правы.
0
Gregory_Mas
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 26
14.10.2012, 13:22  [ТС] #20
DU,
alsav22,
ДА!!! После суток мучений наконец-то программа откомпилировалась и работает!!!

Ошибка была в:
C++
1
template<typename O>
Все буквы O надо было заменить на букву T, т.к. после вариантов, предложенных тов. DU буква T не определялась.

Всем огромное спасибо за помощь!!

Добавлено через 3 минуты
Только вот непонятно - почему после приема с флоатом компилятор отказывался воспринимать тип Т?
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
14.10.2012, 13:29 #21
хз что именно вы там сделали. выкладывайте новый код и укажите где и как ругается?
0
Gregory_Mas
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 26
14.10.2012, 13:51  [ТС] #22
Вот парадокс! При попытке сделать обратно (с типом О) компилятор выдал... Построение успешно завершено.

Похоже, у меня крыша поехала, пойду прогуляюсь.

Еще раз всем спасибо за помощь!)
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.10.2012, 13:51 #23
Gregory_Mas, но вот это никуда не годится. Какой смысл передавать в функцию ноли?
C++
1
B=rec(i,0,0,m);
0
Gregory_Mas
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 26
14.10.2012, 13:58  [ТС] #24
alsav22, Есть другой вариант сделать рекурсивную функцию? Я не против посмотреть, честно.
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.10.2012, 14:08 #25
Вы тогда, хотя бы, сделайте их значениями по умолчанию:
C++
1
2
3
4
5
6
7
8
9
10
...
A<O> rec(int i, O m[], O max = 0, int ind = 0 )
...
return m[i] > max ? rec (i, m, m[i], i) : rec (i, m, max, ind);
....
int main()
{....
  B=rec(i, m);
...
}
1
Gregory_Mas
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 26
14.10.2012, 14:18  [ТС] #26
О как. Не знал, что так можно.
Изначально, увидев код, думал, что при новом вызове функции параметры обнулятся.

Т.е. если в функции мы таким образом задаем новые параметры, то они задаются нулями только 1 раз?
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.10.2012, 14:45 #27
Цитата Сообщение от Gregory_Mas Посмотреть сообщение
Т.е. если в функции мы таким образом задаем новые параметры, то они задаются нулями только 1 раз?
Зависит от того, с каким количеством аргументов вызывается функция. Если, при вызове функции, будет только два аргумента, то третьему и четвёртому параметру присвоится 0. Если три, то четвёртому параметру присвоится 0. Если все четыре, то будут такие, как при вызове.

Добавлено через 5 минут
При вызове из main() у функции два аргумента, поэтому третий и четвёртый буду 0. При рекурсивном вызове аргументов четыре, поэтому их значения уже будут не по умолчанию, а какие есть.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2012, 14:45
Привет! Вот еще темы с ответами:

Написать функцию сравнения двух структур (шаблон структуры задается произвольно) - C++
ЗАДАНИЕ: Написать функцию сравнения двух структур (шаблон структуры задается произвольно). Знатоки, проверьте код: точно ли КОД...

Написать функцию сравнения двух структур (шаблон структуры задается произвольно) - C++
ЗАДАНИЕ: Написать функцию сравнения двух структур (шаблон структуры задается произвольно). Написал но выдает ошибку, Ошибка 1 error...

Помещение структуры в вектор, удаление структуры, изменение элементов структуры - C++
Здравствуйте. Помогите разобраться с тем, как: 1 - находить элементы в векторе зная уникальный элемент структуры. 2 - удалять...

Шаблоны функций, Ошибка: для использования класса шаблон требуется список аргументов шаблон - C++
Есть у меня 3 структуры Трамвай , Троллейбус , Автобус. Для автобуса определены функции (работают) Троллейбус и Трамвай одинаковые поля...


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

Или воспользуйтесь поиском по форуму:
27
Yandex
Объявления
14.10.2012, 14:45
Ответ Создать тему
Опции темы

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