С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
1

Параметр шаблона ostream_iterator по умолчанию

25.01.2015, 15:42. Показов 1444. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите найти ошибку, не могу понять в чем проблема:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <fstream>
 
template <typename T, typename OstIter = std::ostream_iterator<typename T::value_type, char>>
void copy_c(T& conteiner,
            typename OstIter::ostream_type &ost_t = std::cout,
            const typename OstIter::char_type *delim = " ",
            OstIter osit = std::ostream_iterator<typename T::value_type, char>(ost_t, delim))
{
   std::copy(conteiner.begin(), conteiner.end(), osit);
}
 
int main()
{
   std::vector<int> v {1,2,3,4,5,6,7};
 
   std::ofstream ofs("test.txt");
   copy_c(v);
   copy_c(v, ofs, ", ");
 
   return 0;
}
Ошибка:
Кликните здесь для просмотра всего текста
local variable 'ost_t' may not appear in this context
OstIter osit = std::ostream_iterator<typename T::value_type, char>(ost_t, delim))
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.01.2015, 15:42
Ответы с готовыми решениями:

Свертка в параметр шаблона
Что-то никак не соображу какой должен быть синтаксис(C++17, не 11): template &lt;typename T&gt; void...

Параметр шаблона в теле лямбды
Всем привет! Имеется шаблон функции-члена: template &lt;typename T&gt; ...

Шаблон параметр шаблона и наследование
Есть вот такой базовый класс, который описывает абстрактный доступ к контейнеру stl: template&lt;...

Шаблоны и параметр по умолчанию
Добрый день. Вроде всё делаю по учебнику, но компилятор не пропускает: #include &lt;iostream&gt;...

3
2859 / 2006 / 988
Регистрация: 21.12.2010
Сообщений: 3,711
Записей в блоге: 10
25.01.2015, 16:57 2
Лучший ответ Сообщение было отмечено DiffEreD как решение

Решение

http://stackoverflow.com/quest... s-argument

Добавлено через 9 минут
The order of evaluation of function arguments is unspecified.
Моя версия такая: при создании объекта osit объекты ost_t и delim могут быть ещё не определены
1
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
25.01.2015, 17:18  [ТС] 3
Ясно. Остановимся на этом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template <typename T, typename OstIter = std::ostream_iterator<typename T::value_type, char>>
void copy_c(const T& conteiner,
            OstIter osit = std::ostream_iterator<typename T::value_type, char>(std::cout, " "))
{
   std::copy(conteiner.begin(), conteiner.end(), osit);
}
 
int main()
{
   std::vector<int> v {1,2,3,4,5,6,7};
 
   std::ofstream ofs("test.txt");
   copy_c(v);
   copy_c(v, std::ostream_iterator<int>(ofs, ", "));
}
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
25.01.2015, 17:39 4
как-то параметр по умолчанию - не очень в тему.
увидишь в коде: copy_c(v); и пойди догадайся что это печать на экран.
имхо лучше для печати на экран завести отдельную функцию с соответствующим
именем и вызывать ее, когда нужна печать на экран. пусть она и вызывает
copy_c с нужным out итератором. итого все можно упростить:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
template <typename Cont, typename OutIter>
void copy_c(const Cont& conteiner, OutIter outIter)
{
   std::copy(conteiner.begin(), conteiner.end(), outiter);
}
 
template <typename Cont>
void print_c(const Cont& conteiner)
{
   std::copy(conteiner, std::ostream_iterator<typename Cont::value_type, char>(std::cout, " "));
}
 
int main()
{
   std::vector<int> v {1,2,3,4,5,6,7};
 
   std::ofstream ofs("test.txt");
   print_c(v);
   copy_c(v, std::ostream_iterator<int>(ofs, ", "));
}
0
25.01.2015, 17:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.01.2015, 17:39
Помогаю со студенческими работами здесь

Параметр функции по умолчанию
Пишу функции, у которой может быть параметр по умолчанию вот код int add_after (int val, int pos...

Шаблоннный клас как параметр шаблона
Если в кратце: Имеется такой код: typedef ByteStuffing&lt;USART0, CRC8&lt;USART0&gt; &gt; StreamDelimiter;...

Свой тип как параметр шаблона
Есть вопрос по коду: #include &lt;iostream&gt; #include &lt;memory&gt; #include &lt;vector&gt; using namespace...

Передача функции как параметр шаблона
Хочу передавать в шаблон любую функцию без параметров и вызывать ее из него. Как это сделать? ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru