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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ilikeMagic
11 / 11 / 2
Регистрация: 26.04.2012
Сообщений: 104
#1

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

21.10.2012, 00:58. Просмотров 737. Ответов 12
Метки нет (Все метки)

Доброй ночи всем!

Хочу реализовать открытие файла для чтения из конструктора класса 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);
}
 
/* ......... */
Подскажите каким образом открывать файл с именем, которое передаю в виде параметра конструктора.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2012, 00:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с файлом через класс (C++):

Класс (работа с текстовым файлом) - C++
Здравствуйте. помогите пожалуйста) есть класс: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;stdlib.h&gt; ...

Класс матрицы работа с файлом - C++
Разработать для класса динамических матриц методы чтения матрицы из файла текстового формата и записи матрицы в файл текстового формата...

Работа с файлом через классы - C++
Привет всем! Может кто помочь, как работать с файлами (открыть, закрывать, читать из файла, записывать в файл)через классы, объяснить на...

работа с файлом через входной параметр - C++
int _tmain(int argc,char* argv) { FILE* F =fopen(argv, &quot;wt+&quot;); когда пишу параметр запуская через командную строку или ярлык,...

Работа с текстовым файлом (название файлы через переменную) - C++
доброго времяни суток,подскажите хочу ввести в кансоль переменную типа строка,а затем создать и открыть файл название каторого есть эта...

Класс для работы с файлом. - C++
Есть класс для сортировки файла по номеру телефона. void Job::sort() { for(;;) { ifstream fin; fin.open(filename,...

12
CEBEP
106 / 106 / 9
Регистрация: 21.03.2010
Сообщений: 440
21.10.2012, 01:21 #2
C++
1
2
3
4
5
6
CTextFile::CTextFile(string fname)
    : _file(fname)
    , _file_name(fname)
{
    _file.open();
}
0
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> >&)
0
CEBEP
106 / 106 / 9
Регистрация: 21.03.2010
Сообщений: 440
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();
}
0
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>]
0
soon
2541 / 1306 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.10.2012, 17:47 #6
Марш книги читать. _file.open() не нужен, это первое. Второе, функция open принимает как минимум один аргумент.
1
alsav22
5425 / 4820 / 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);
}
0
soon
2541 / 1306 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.10.2012, 17:56 #8
alsav22, Про список инициализации слышали?
0
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();
}
И чем, кстати, список инициализации лучше инициализации переменных в теле конструктора?
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.10.2012, 18:09 #10
Цитата Сообщение от soon Посмотреть сообщение
alsav22, Про список инициализации слышали?
И что? Без его прямо никак?

Добавлено через 5 минут
Цитата Сообщение от ilikeMagic Посмотреть сообщение
И чем, кстати, список инициализации лучше инициализации переменных в теле конструктора?
Ничем. Но иногода без них не обойтись. Например. инициализации констант или вызов конструктора базового класса.
1
Kastaneda
Нарушитель
Эксперт С++
4669 / 2873 / 232
Регистрация: 12.12.2009
Сообщений: 7,307
Записей в блоге: 2
Завершенные тесты: 1
21.10.2012, 18:09 #11
Цитата Сообщение от ilikeMagic Посмотреть сообщение
И чем, кстати, список инициализации лучше инициализации переменных в теле конструктора?
В данном случае он не лучше, он просто необходим. При входе в тело конструктора объект _file уже будет создан (для него будет вызван дефолтный конструктор). А так в списке инициализации ты говоришь, что нужно вызывать конструктор с праметром fname.c_str().
1
Kastaneda
Нарушитель
Эксперт С++
4669 / 2873 / 232
Регистрация: 12.12.2009
Сообщений: 7,307
Записей в блоге: 2
Завершенные тесты: 1
21.10.2012, 18:10 #12
Цитата Сообщение от Kastaneda Посмотреть сообщение
он просто необходим
ну если не использовать open().
1
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.10.2012, 18:11 #13
Цитата Сообщение от Kastaneda Посмотреть сообщение
ну если не использовать open().
Спасибо за уточнение.
0
21.10.2012, 18:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2012, 18:11
Привет! Вот еще темы с ответами:

Класс: как обратиться к методу производного класса через итератор на базовый класс? - C++
Есть абстрактный и два порожденных. Хочу создать например list&lt;Base*&gt; list1; затем добавляю себе в список: ...

Работа с файлом - C++
ofstream file1(&quot;C:\\Users\\User\\Desktop\\jewelry.txt&quot;); Ошибка 6 error C2146: синтаксическая ошибка: отсутствие &quot;;&quot; перед...

Работа с файлом - C++
Мне требуется подключить текстовый файл ко всей программе. Прежде поключал файл только к конкретной процедуре. Благодарю за помощь.

Работа с файлом в С++ - C++
Всем привет! Я никогда не работал с С++, но возникла необходимость чтения-записи в файл на С++. А если еще точнее Embedded C++. Не...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru