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

Работа с файлом через класс - C++

Восстановить пароль Регистрация
 
ilikeMagic
11 / 11 / 2
Регистрация: 26.04.2012
Сообщений: 104
21.10.2012, 00:58     Работа с файлом через класс #1
Доброй ночи всем!

Хочу реализовать открытие файла для чтения из конструктора класса CTextFile:
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
#ifndef ___TEXT_FILE___
#define ___TEXT_FILE___
 
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
class CTextFile
{
    public:
        CTextFile(string fname);
        CTextFile(const CTextFile & obj);
          ~CTextFile();
 
       char buf();
       int get_letter_count();
       
    private:
       char    _buf;
       string  _file_name;
       fstream _file;
 
};
#endif
Файл реализации:
C++
1
2
3
4
5
6
7
CTextFile::CTextFile(string fname)
{
    _file_name = fname;
    _file = fstream(_file_name);
}
 
/* ......... */
Подскажите каким образом открывать файл с именем, которое передаю в виде параметра конструктора.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2012, 00:58     Работа с файлом через класс
Посмотрите здесь:

C++ Класс для работы с файлом.
C++ Работа с файлом через классы
Работа с файлом C++
C++ Работа с файлом в С++
C++ Класс (работа с текстовым файлом)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
21.10.2012, 01:21     Работа с файлом через класс #2
C++
1
2
3
4
5
6
CTextFile::CTextFile(string fname)
    : _file(fname)
    , _file_name(fname)
{
    _file.open();
}
ilikeMagic
11 / 11 / 2
Регистрация: 26.04.2012
Сообщений: 104
21.10.2012, 12:21  [ТС]     Работа с файлом через класс #3
Не работает(

Ругань компилятора:
C++
1
2
3
4
5
g++ -c main.cpp
g++ -c CTextFile.cpp
CTextFile.cpp: In constructor `CTextFile::CTextFile(std::string)':
CTextFile.cpp:5: error: no matching function for call to `std::basic_fstream<cha                                                                     r, std::char_traits<char> >::basic_fstream(std::string&)'
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/iosfwd:96: note: candidates are: s                                                                     td::basic_fstream<char, std::char_traits<char> >::basic_fstream(const std::basic                                                                     _fstream<char, std::char_traits<char> >&)
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
21.10.2012, 12:25     Работа с файлом через класс #4
C++
1
2
3
4
5
6
CTextFile::CTextFile(string fname)
    : _file(fname.c_str())
    , _file_name(fname)
{
    _file.open();
}
ilikeMagic
11 / 11 / 2
Регистрация: 26.04.2012
Сообщений: 104
21.10.2012, 17:44  [ТС]     Работа с файлом через класс #5
Всё равно не работает.

Снова компилятор ругается:
C++
1
2
3
CTextFile.cpp: In constructor `CTextFile::CTextFile(std::string)':
CTextFile.cpp:6: error: no matching function for call to `std::basic_ifstream<char, std::char_traits<char> >::open()'
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/fstream:570: note: candidates are: void std::basic_ifstream<_CharT, _Traits>::open(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.10.2012, 17:47     Работа с файлом через класс #6
Марш книги читать. _file.open() не нужен, это первое. Второе, функция open принимает как минимум один аргумент.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.10.2012, 17:54     Работа с файлом через класс #7
C++
1
2
3
4
5
CTextFile::CTextFile(string fname)
{
    _file_name = fname;
    _file.open(_file_name);
}
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.10.2012, 17:56     Работа с файлом через класс #8
alsav22, Про список инициализации слышали?
ilikeMagic
11 / 11 / 2
Регистрация: 26.04.2012
Сообщений: 104
21.10.2012, 17:59  [ТС]     Работа с файлом через класс #9
Спасибо, всем.
Просто выполнял по аналогии с
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main(int argc, char ** argv)
{
    char buf;
    ifstream my_txt;
    my_txt.open(argv[1]);
 
    int number(0);
    while(my_txt.get(buf))
        ++number;
    cout << number;
 
    my_txt.close();
    return 0;
}
и там сначала создаёшь объект класса ifstream, а потом связываешь его с файлом.

Всё заработало в таком варианте:
C++
1
2
3
4
CTextFile::CTextFile(string fname): _file_name(fname), _file(fname.c_str())
{
    //_file.open();
}
И чем, кстати, список инициализации лучше инициализации переменных в теле конструктора?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.10.2012, 18:09     Работа с файлом через класс #10
Цитата Сообщение от soon Посмотреть сообщение
alsav22, Про список инициализации слышали?
И что? Без его прямо никак?

Добавлено через 5 минут
Цитата Сообщение от ilikeMagic Посмотреть сообщение
И чем, кстати, список инициализации лучше инициализации переменных в теле конструктора?
Ничем. Но иногода без них не обойтись. Например. инициализации констант или вызов конструктора базового класса.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
21.10.2012, 18:09     Работа с файлом через класс #11
Цитата Сообщение от ilikeMagic Посмотреть сообщение
И чем, кстати, список инициализации лучше инициализации переменных в теле конструктора?
В данном случае он не лучше, он просто необходим. При входе в тело конструктора объект _file уже будет создан (для него будет вызван дефолтный конструктор). А так в списке инициализации ты говоришь, что нужно вызывать конструктор с праметром fname.c_str().
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
21.10.2012, 18:10     Работа с файлом через класс #12
Цитата Сообщение от Kastaneda Посмотреть сообщение
он просто необходим
ну если не использовать open().
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2012, 18:11     Работа с файлом через класс
Еще ссылки по теме:

C++ Работа с текстовым файлом (название файлы через переменную)
C++ работа с файлом через входной параметр
C++ Класс матрицы работа с файлом

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.10.2012, 18:11     Работа с файлом через класс #13
Цитата Сообщение от Kastaneda Посмотреть сообщение
ну если не использовать open().
Спасибо за уточнение.
Yandex
Объявления
21.10.2012, 18:11     Работа с файлом через класс
Ответ Создать тему
Опции темы

Текущее время: 21:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru