1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
|
|||||||||||
1 | |||||||||||
Поток как статическая компонента объкта02.08.2013, 20:17. Показов 2418. Ответов 20
Метки нет (Все метки)
Доброго вечера ! Выполняю упражнения по книге. Если вкратце то при компиляции возникает ошибка в результате добавления static fstream file в поле данных класса как того и требует упражнение (создать поток как стат компоненту объекта и создать 2 стат функции для управления). Может я что то неверно понял, подскажите пожалуйста, полная версия упражнения написана ниже.
Перепишите программы из упражнений 4 и 6 таким образом, чтобы использовать объект fstream в качестве статической компоненты класса name. Функционирование программы должно сохраниться. Напишите статическую функцию для открытия потока и еще одну — для сбрасывания файлового указателя и установки его на начало файла. Эту же функцию можно использовать для чтения всего файла. Добавлено через 5 минут Прошу прощения забыл инициализировать статическую компоненту после определения класса. Вопрос закрыт )
0
|
02.08.2013, 20:17 | |
Ответы с готовыми решениями:
20
Удочерение объкта при входе через коллайдер.Как осуществить? [C#] Использование компонента TreeView как переключатель вкладок компонента TabControl Как с одной строки компонента, сохранить информацию в другую строку другого компонента? Ошибка-Текущий поток должен быть задан как поток однопоточного контейнера STA |
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
02.08.2013, 20:21 | 2 |
неплохо бы ошибки еще сюда постить.
статические мемберы нужно явно инициализировать например. вы это сделали?
1
|
59 / 58 / 7
Регистрация: 03.02.2013
Сообщений: 167
|
|
02.08.2013, 20:29 | 3 |
в конструкторе открытие файла сделай, один раз и все. Это, если не ошибаюсь из Лафоре.
0
|
70 / 70 / 13
Регистрация: 13.05.2012
Сообщений: 130
|
|
02.08.2013, 20:35 | 4 |
0
|
59 / 58 / 7
Регистрация: 03.02.2013
Сообщений: 167
|
||||||
02.08.2013, 20:42 | 5 | |||||
1
|
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
|
||||||
03.08.2013, 00:22 [ТС] | 7 | |||||
Да, в этом
Добавлено через 6 минут Я решил писать в форматированном виде и вот в чем проблема, если убрать из главной функции main строчки employee::FileClose(); employee::FileOpen(); при записи после данных будет добавляться n-е количество символов заменить пробовал на seekg(0) но не помогло та же беда
0
|
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
|
||||||
03.08.2013, 00:46 [ТС] | 9 | |||||
Что то не помогает
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
03.08.2013, 00:53 | 10 |
У меня работает даже если просто: file.seekg(0);
Добавлено через 1 минуту Это где видите? В файле? При выводе из файла? Добавлено через 1 минуту Файл новый создаёте? Может у вас старый остался?
1
|
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
|
|
03.08.2013, 01:03 [ТС] | 12 |
И в файле и при выводе. Да файл был старый. Удалил старый файл и этот глюк пропал.. Не пойму только как это помогло ?!
Сделал опыт удалил старый файл все заработало, потом убрал строку с переводом указателя на начало и очисткой буфера, появился глюк, потом вернул эту строку но глюк уже не проходит)) Напомню глюк состоит в том что после каждой новой записи добавляется n-е количество повторяющихся иероглифов или символов
0
|
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
|
|
03.08.2013, 01:10 [ТС] | 14 |
0
|
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
|
|
03.08.2013, 01:57 [ТС] | 16 |
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
03.08.2013, 02:16 | 17 |
Чтение/запись буферизованы, всё сначала в буфер, потом в файл. Если после записи не освобождать буфер (или при закрытии файла, или через flush()), то, при переходе к чтению, выведется содержимое буфера от позиции курсора (где он остановился при записи) и до конца буфера, а там муссор. Запись же в файл произойдёт (в данном коде) при окончании программы, и просто запишется всё содержимое буфера, и данные и муссор.
1
|
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
|
|
03.08.2013, 02:29 [ТС] | 18 |
Но ведь курсор записи один, а курсов чтения другой, на то для каждого свои функции seekp, tellp и seekg, seekg
0
|
1 / 1 / 1
Регистрация: 01.07.2013
Сообщений: 127
|
|
03.08.2013, 02:44 [ТС] | 20 |
Вы имеете ввиду что когда установлено оба режима fstream file(" name", iso::in | ios::out | ios::app) то работает только 1 указатель ?
А как же бит ios:: app который ставит указатель записи всегда на конец файла. А читаем то мы всегда с 0. Значит все же у потока имеются оба указателя даже при такой настройке. В чем я ошибаюсь ?!
0
|
03.08.2013, 02:44 | |
03.08.2013, 02:44 | |
Помогаю со студенческими работами здесь
20
OpenFileDialog и потоки: Текущий поток должен быть задан как поток однопоточного контейнера (STA) Как в С++ Builder из 2х потоков рисовать на форме квадратики(это первый поток рисует) и кружочки (2ой поток)) Вызывающий поток не может получить доступ к объекту, так как его владельцем является другой поток Смена свойств объкта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |