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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2011, 17:17   #1
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию fstream конструкторы

Есть такой код
Код:
#ifndef _FileClass_h_
#define _FileClass_h_
#include <fstream>
#include <cstdio>
class fstream;

class FILECLASS{
private:
	fstream *file;
public:
	FILECLASS(char *filename)
	{
	      file = new fstream (filename);
	}


};


#endif _FileClass_h_
проблема с динамическим выделением памяти для file ,т.е.
если я передаю в конструкторе указатель на имя файла выдает ошибку
Цитата:
error C2514: fstream: не имеет конструкторов
если же я напишу
Код:
file = new fstream;
выдаст ошибку
Цитата:
error C2512: fstream: нет подходящего конструктора по умолчанию
что делать ?

Последний раз редактировалось Hemul; 01.04.2011 в 19:56.
Hemul вне форума Ответить с цитированием
Старый 01.04.2011, 18:45   #2
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Цитата:
FILECLASS(char *filename,short int mod)
{
file = new fstream (filename);
}

Цитата:
error C2514: fstream: не имеет (подходящих) конструкторов
Потому, что это так и есть. Если я вас понял, то правильно должно быть так:
Код:
FILECLASS(char *filename, ios::open_mode mod)
{
      if(mod & ios::in)
            file = new ifstream(filename, mod);
      else if(mod & ios::out)
            file = new ofstream(filename, mod);
      else
            throw "Unknown mode";
}
fstream - служебный базовый класс, его лучше не трогать.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 01.04.2011, 18:48   #3
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

переменная mode для совсем других целей ,нежели для способа открытия файла
Код:
FILECLASS(char *filename)
	{
	file = new fstream;
	}
написав вот так ничего не изменится
Hemul вне форума Ответить с цитированием
Старый 01.04.2011, 18:52   #4
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Цитата:
переменная mode для совсем других целей ,нежели для способа открытия файла
Хорошо; в таком случае ваш класс должен из воздуха брать способ открытия файла?
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 01.04.2011, 18:59   #5
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

Код:
int main (){
	fstream file;
	file.open("test.txt");
	if(file) cout<<"Фаил открыт"<<endl;
}
Код:
int main (){
	fstream *file = new fstream;
	file->open("test.txt");
	if(file) cout<<"Фаил открыт"<<endl;
}
прекрасно работает и даже выводит сообщение об удачной операции
MS Visual Studio 2008 Express Edition

Последний раз редактировалось Hemul; 01.04.2011 в 19:11.
Hemul вне форума Ответить с цитированием
Старый 01.04.2011, 19:20   #6
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Прошу прощения за редкостный бред, действительно, fstream является не базовым, конечно же, а производным; соответственно по теме - у вас неполное определение класса fstream (его объявление class fstream) неверно и излишне, так как fstream - это всего лишь typedef от basic_fstream<char, std::char_traits<char> >.
Без него все компилируется.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 01.04.2011, 19:52   #7
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

а зачем вам мод? там всё по умолчанию хорошо. можете сделать ветки - открыть в бинарном режиме или с добавлением в конец конечно если хотите.
а режимы это в С.
onewho вне форума Ответить с цитированием
Старый 01.04.2011, 19:56   #8
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

забудте про mode ,все его там нет
Hemul вне форума Ответить с цитированием
Старый 01.04.2011, 20:43   #9
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

извиняюсь перед Syuf,если заюзать ofstream ,ifstream ,как он советовал ,все работает
Hemul вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с возвратом fstream Farrel Общие вопросы C/C++ 11 09.03.2011 19:03
fstream, чтение и запись .txt willfogg Помощь студентам 0 26.04.2009 18:26
Дробная часть в fstream Ozerich Общие вопросы C/C++ 3 14.03.2009 23:00
fstream.eof() в mingw alexinspir Общие вопросы C/C++ 1 30.09.2008 08:00
Программа на C++ с использованием fstream Dergard Помощь студентам 2 14.12.2007 05:18