| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > потоки сохранение и считывания файла [C++] |
| Автор: ArniLand 27.5.2010, 20:50 | ||||
Написал программу где нужно было использовать перегрузку <<, >> и сохранение и считывание в текстовый файл. Вопрос есть также, как правильно сделать пустым массив типа сhar? Про комментировал строку в программе где нужно это сделать. Компилятор VS 2008 professional. Выдает такие ошибки:
Код программы:
|
| Автор: jonie 27.5.2010, 21:03 | ||||
если у вас ДВА параметра, и вы хотите использовать operator<< в "привычном режиме"*, то вам нужно сделать этот метод friend-ом (friend, напомню, уже НЕ член класса и в части реализации указывать classname:: уже нет надобности). Собственно friend нужен для доступа к внутренностям написанного вами класса и для удобной и синтаксически понятной записи. *"привычный режим operator<<" - тут я подразумеваю вызов в виде cout<<1. Это преобразуется в operator<<(cout, 1) (вызов по сути глобальной функции), т.к. если operator<< будет членом класса, то вызвать его придется как cout.operator<<(1) {вопрос к общественности: какие еще способы будут?} |
| Автор: ArniLand 27.5.2010, 21:19 | ||
jonie,Спасибо насчет подсказки с friend, ошибку исправил. Можете еще пожалуйста подсказать что не так с этими строками?
|
| Автор: jonie 27.5.2010, 21:41 | ||
ArniLand, "жалуется" ? А сиську не просит? КАК жалуется??
|
| Автор: ArniLand 27.5.2010, 21:50 | ||||
ошибку такого плана оно выдает тут
|
| Автор: jonie 27.5.2010, 21:58 |
| ну как минимум стОит передавать ссылку на Students, т.к. Students& в функции operator<< (и >>), т.к. копировать накладно... идейно ошибок не доллжно быть, вероятно вы упустили другие ошибки (более раннии) либо не сделали include с h файлом, где у вас объявление Students имеется (а также не сделали защиты от повторного включения в h файле!) |
| Автор: toxx 27.5.2010, 22:03 | ||
| ArniLand убери скобки
|
| Автор: jonie 27.5.2010, 22:08 |
| toxx, угу, гуд что заметил, я не лазил в вверх в код. Для тех кто не в теме: скобки означают что объявлена функция (опережающее объявление) obj не принимающая аргументов и возращающая Students, а не объект (как задумывалось). |
| Автор: toxx 27.5.2010, 22:13 | ||
| jonie Просто уже не 1й раз пишет сюда, и все время одни и те же ошибки... Уже сколько раз писали что лучше писать const, но я напишу еще раз может в след раз напишет как нужно =)
|
| Автор: ArniLand 27.5.2010, 22:20 |
| toxx, вы немного ошиблись, там где оператор >> писать const не нужно, а то буде выдавать оишбку |
| Автор: djamshud 27.5.2010, 22:26 |
| ArniLand, ээмммм. Там же read-only. Const нужен, иначе константный объект не распечатаете. |
| Автор: toxx 27.5.2010, 22:39 | ||
| djamshud Ура! у меня последователи ;) я вот все думаю.. не лучше выделять память динамически лучше тут? ArniLand
mutable |
| Автор: djamshud 28.5.2010, 01:45 |
| toxx, ура! У меня появился кумир! К черту mutable, его используют только в специфических случаях. Я не знаю, что за ошибки выдает компилятор, но идеологически в ту функцию нужно передавать объект по ссылке на константу. |
| Автор: toxx 28.5.2010, 21:44 | ||
djamshud
|
| Автор: halfnode 11.2.2011, 03:58 | ||
| Подниму тему, дабы не плодить. Разбираюсь в потоках. Объясните пожалуйста, что не так в фукции read()? write() пишет в файл все на ура. По крайней мере, размер файла соответствует тому, сколько объектов в него записано. А вот чтение не проходит. Прям беда. Притом ошибка происходит уже после выполнения if(inFile.eof()) код, собственно:
Уже даже не знаю что и думать. Где -то завис. |
| Автор: xvr 11.2.2011, 13:01 |
| Для потоков EOF состояние - это ошибка. Вот он вам в 32 строке и говорит, что у него ошибка (по программе - ожидаемая, но ifstream этого не знает |