Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2012, 12:12   #1
pinkiller
Форумчанин
 
Регистрация: 29.10.2011
Сообщений: 141
По умолчанию Потоки.

Извиняюсь, послезавтра сдавать курсач а переделывать оооочень много.

Так что заранее прошу прощения что буду оставлять на форуме много темок.

Код:
template <class Class> 
class List:public fstream{

public: 
	Box<Class>* Begin;
	string Name;
	fstream fst;
	List():fstream(){
		Begin=0;
		cout<<"What file?\nPrint file name: ";
		cin>>Name;
		Name+='.';
		Name+='d';
		Name+='a';
		Name+='t';

		ifstream ifst;
		ifst.open(Name.c_str());
		if (ifst.is_open()){cout<<"File has been\nYou open file: "<<Name<<"\n"; fst.open(Name.c_str(), 
fstream::in | fstream::out | fstream::binary);}
		else {cout<<"Creatin...\nYou creat file: "<<Name<<"\n"; fstream fst(Name.c_str(), 
fstream::in | fstream::out | fstream::binary);}
		ifst.close();
		
	};
Очень проблемно дается работа при наследовании от fstream:

Код:
fstream fst(Name.c_str(), fstream::in | fstream::out | fstream::binary);
Какого то лешего не создает файл.

а
Код:
fst(Name.c_str(), fstream::in | fstream::out | fstream::binary);
выдает ошибку:

Цитата:
error C2064: term does not evaluate to a function taking 2 arguments

Последний раз редактировалось rpy3uH; 12.01.2012 в 10:19.
pinkiller вне форума Ответить с цитированием
Старый 10.01.2012, 12:37   #2
pinkiller
Форумчанин
 
Регистрация: 29.10.2011
Сообщений: 141
По умолчанию

справился:
Код:
public: 
	Class* Begin;
	string Name;
	fstream fst;

	List():fstream(){
		Begin=0;
		cout<<"What file?\nPrint file name: ";
		cin>>Name;
		Name+='.';
		Name+='d';
		Name+='a';
		Name+='t';

		ifstream ifst;
		ifst.open(Name.c_str());
		if (ifst.is_open()){cout<<"File has been\nYou open file: "<<Name<<"\n";}
		else {cout<<"Creatin...\nYou creat file: "<<Name<<"\n"; ofstream ofst(Name.c_str()); ofst.close();}
		fst.open(Name.c_str(), fstream::in | fstream::out | fstream::binary);
		ifst.close();
		
	};
как то хреново fstream работает.
pinkiller вне форума Ответить с цитированием
Старый 10.01.2012, 12:38   #3
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от pinkiller Посмотреть сообщение
Код:
fstream fst(Name.c_str(), fstream::in | fstream::out | fstream::binary);
Какого то лешего не создает файл.
Вы уже открыли файл в строке
Код:
ifst.open(Name.c_str());
и снова пытаетесь его открыть
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 10.01.2012, 13:00   #4
pinkiller
Форумчанин
 
Регистрация: 29.10.2011
Сообщений: 141
По умолчанию

Блейд. вот тут вы ошиблись. ifst обьект класса ifstream
он не умет создавать файлы, он пытается его открыть, если такой есть, если файла нет он его не создает и открыть не может.
pinkiller вне форума Ответить с цитированием
Старый 11.01.2012, 09:14   #5
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Сколько не приглядывался, так и не смог понять - для чего использовалось наследование? Более того, код юзает композицию. Если убрать наследование - смысл вообще никак не изменится.
_Bers вне форума Ответить с цитированием
Старый 11.01.2012, 10:03   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Блейд. вот тут вы ошиблись. ifst обьект класса ifstream
он не умет создавать файлы, он пытается его открыть, если такой есть, если файла нет он его не создает и открыть не может.
ну потому что нечего читать из файла которого нет.
так что все верно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.01.2012, 11:58   #7
pinkiller
Форумчанин
 
Регистрация: 29.10.2011
Сообщений: 141
По умолчанию

Что такое композиция?

P.S Без наследования
fstream fst;
fst.open("Name");
fst.close();

C наследованием.
open("Name");
close();
pinkiller вне форума Ответить с цитированием
Старый 11.01.2012, 18:59   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
P.S Без наследования
fstream fst;
fst.open("Name");
fst.close();

C наследованием.
open("Name");
close();
мы то это знаем, но вы почему то тут пишите иное.

http://ru.wikipedia.org/wiki/Компози...ограммирование)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.01.2012, 21:15   #9
pinkiller
Форумчанин
 
Регистрация: 29.10.2011
Сообщений: 141
По умолчанию

Ну я этого не знал пока освоился с этим наследованием)
pinkiller вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C#] Потоки Lemo C# (си шарп) 2 24.05.2011 21:50
Потоки. FieStik Общие вопросы C/C++ 4 23.05.2011 14:12
Потоки RedScreenOfLife Общие вопросы C/C++ 5 07.03.2011 14:30
потоки Cpluser Общие вопросы .NET 5 15.02.2011 22:17
потоки sergei64_89 Помощь студентам 2 20.10.2010 02:08