Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> std::basic_ostream, Примерчик бы 
V
    Опции темы
dix75
Дата 17.6.2008, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: нет
Всего: 1



Всем Доброго вечера!
У меня вопрос такой
нашел я одну функцию в книге (Рэй Лишнер "C++ справочник"), а примера использования функции нет 

Функция копирования файла
Код

template <typename charT, typename trains>
void TCopyList::copy(std::basic_ostream<charT,trains>&out, std::basic_ostream<charT,trains>&in)
{
out <<in.rbuf();
}


Но как пользоватья ей я не знаю 
Может кто-нить напишет как ей пользоваться

Это сообщение отредактировал(а) dix75 - 17.6.2008, 20:07


--------------------
save your mind
PM MAIL   Вверх
JackYF
Дата 17.6.2008, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(dix75 @  17.6.2008,  19:07 Найти цитируемый пост)
std::basic_ostream<charT,trains>&in

здесь должен быть istream, вестимо.

Пример:

Код

TCopyList::copy(std::cout, std::cin);



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Mephisto
Дата 17.6.2008, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: нет
Всего: 34



Не пойму почему basic_ostream описан как in.
Но если так как я написал, то понятно :
Код

#include <iostream>
#include <fstream>

using namespace std;

template <typename charT, typename trains>
void copy(std::basic_ostream<charT,trains>&out, std::basic_istream<charT,trains>&in)
{
out <<in.rdbuf();
}

int main (){
  ifstream t("test.txt");
  copy(cout, t);
  return 0;
}


PM   Вверх
dix75
Дата 17.6.2008, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: нет
Всего: 1



Mephisto
Прошу прощения действительно  basic_istream


--------------------
save your mind
PM MAIL   Вверх
dix75
Дата 17.6.2008, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: нет
Всего: 1



Ошибка :(

Код

[ILINK32 Error] Error: Unresolved external 'void TCopyList::copy<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::basic_istream<char, std::char_traits<char> >&)' referenced from C:\B2008\DEBUG\B2008.OBJ



--------------------
save your mind
PM MAIL   Вверх
vinter
Дата 17.6.2008, 20:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



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

Цитата(dix75 @  17.6.2008,  21:42 Найти цитируемый пост)
Ошибка :(

она у тебя объявлена\определена?
Цитата(dix75 @  17.6.2008,  21:07 Найти цитируемый пост)
trains

я думаю должно быть traits, а уж никак не trains  smile 

Это сообщение отредактировал(а) vinter - 17.6.2008, 20:54


--------------------
Мой блог
PM MAIL WWW   Вверх
dix75
Дата 17.6.2008, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: нет
Всего: 1



исправил на traits
результат Не помогло

Пытаюсь работать так
Код

TCopyList *List;
ifstream in("C:\\cx.txt");
ofstream out("C:\\cx1.txt");
List->copy(out, in);



--------------------
save your mind
PM MAIL   Вверх
baldina
Дата 17.6.2008, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



у тебя std::basic_ostream<charT,trains>&out не согласуется с ofstream который есть basic_ofstream<char, char_traits<char> > и т.д.

Добавлено через 5 минут и 7 секунд
не, ошибся, согласуется все.

Добавлено через 6 минут и 11 секунд
у тебя просто шаблон TCopyList::copy видимо в cpp файле, перенеси его в .h  и все

Это сообщение отредактировал(а) baldina - 17.6.2008, 21:17
PM MAIL   Вверх
dix75
Дата 17.6.2008, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: нет
Всего: 1



baldina

размещаю в секции public 
другая ошибка  smile 

Код

[BCC32 Error] List.h(28): E2316 'rbuf' is not a member of 'istream'



--------------------
save your mind
PM MAIL   Вверх
vinter
Дата 17.6.2008, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



а iostream подключен в .h? std?


--------------------
Мой блог
PM MAIL WWW   Вверх
andrew_121
Дата 17.6.2008, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Цитата(dix75 @  17.6.2008,  21:29 Найти цитируемый пост)
[BCC32 Error] List.h(28): E2316 'rbuf' is not a member of 'istream'

По моему - rdbuf


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
baldina
Дата 17.6.2008, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



vinter,  smile 
dix75, проверяй iostream в .h

Добавлено через 51 секунду
да, rdbuf конечно
PM MAIL   Вверх
dix75
Дата 17.6.2008, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: нет
Всего: 1



Прикольно действительно rdbuf  smile 
Непонятно почему в cpp нельзя?

А как мона дописать файл?



--------------------
save your mind
PM MAIL   Вверх
andrew_121
Дата 17.6.2008, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Цитата(dix75 @  17.6.2008,  21:52 Найти цитируемый пост)
А как мона дописать файл?

Путем Чтения и Записи  smile 


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
dix75
Дата 17.6.2008, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: нет
Всего: 1



andrew_121

smile

вот так я думаю smile

Код

TirdImageList *List;
std::ifstream in("C:\\cx.txt");
std::ofstream out("C:\\cx1.txt",ios::app);
List->copy(out, in);


Добавлено через 2 минуты и 16 секунд
Меня мучает вопрос почему нельзя писать реализацию функции в cpp?


--------------------
save your mind
PM MAIL   Вверх
baldina
Дата 17.6.2008, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



шаблон - это не готовый код класса или функции, это инструкция компилятору, как их создавать. поэтому шаблон должен быть у компилятора "под рукой". Есть способ принудительной генерации кода по шаблону для заданных типов, но в данном случае этого не надо. Пусть тебя .h не смущает, посмотри тексты STL - там все во включаемых файлах.
Наконец, есть такая штука, как экспорт шаблонов, но с поддержкой этой фичи со стороны компиляторов пока плоховато.
PM MAIL   Вверх
vinter
Дата 17.6.2008, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(dix75 @  17.6.2008,  23:15 Найти цитируемый пост)
Меня мучает вопрос почему нельзя писать реализацию функции в cpp?

можно, и нужно
Цитата(dix75 @  17.6.2008,  23:15 Найти цитируемый пост)
вот так я думаю

в смысле, ты думаешь улыбаясь?


--------------------
Мой блог
PM MAIL WWW   Вверх
dix75
Дата 17.6.2008, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: нет
Всего: 1



причем постоянно smile


в cpp выдает ошибку описанную ранее

Это сообщение отредактировал(а) dix75 - 17.6.2008, 22:34


--------------------
save your mind
PM MAIL   Вверх
vinter
Дата 17.6.2008, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(dix75 @  17.6.2008,  23:33 Найти цитируемый пост)
в cpp выдает ошибку описанную ранее

ну это я имел в виду про обычные ф-ии, а у тебя объявление шаблона в .h а реализации в cpp, да? Если так, то с шаблонами так нельзя.


--------------------
Мой блог
PM MAIL WWW   Вверх
dix75
Дата 17.6.2008, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: нет
Всего: 1



спасибо


--------------------
save your mind
PM MAIL   Вверх
bsa
Дата 17.6.2008, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(vinter @ 17.6.2008,  23:03)
Если так, то с шаблонами так нельзя.

По крайней мере до тех пор, пока компиляторы не поддержат extern template...
PM   Вверх
vinter
Дата 17.6.2008, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(bsa @  18.6.2008,  00:12 Найти цитируемый пост)
По крайней мере до тех пор, пока компиляторы не поддержат extern template...

export если быть точным smile


--------------------
Мой блог
PM MAIL WWW   Вверх
bsa
Дата 17.6.2008, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



vinter, точно.  smile 
PM   Вверх
xvr
Дата 18.6.2008, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(bsa @ 17.6.2008,  23:12)
Цитата(vinter @ 17.6.2008,  23:03)
Если так, то с шаблонами так нельзя.

По крайней мере до тех пор, пока компиляторы не поддержат extern template...

Эх, sun'овский C++ компилятор поддерживал это еще более 10 лет назад (правда без слова export, не было его еще тогда  smile )

PM MAIL   Вверх
Mephisto
Дата 18.6.2008, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: нет
Всего: 34



Цитата(dix75 @  17.6.2008,  22:52 Найти цитируемый пост)
Прикольно действительно rdbuf  smile 
Непонятно почему в cpp нельзя?

я, в своем примере rdbuf и написал smile
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1143 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.