![]() |
файлы
Есть программа:
Код:
#include <iostream.h> error C2678: binary '>>' : no operator defined which takes a left-hand operand of type 'class istream_withassign' (or there is no acceptable conversion) error C2678: binary '>>' : no operator defined which takes a left-hand operand of type 'class istream_withassign' (or there is no acceptable conversion) error C2678: binary '>>' : no operator defined which takes a left-hand operand of type 'class istream_withassign' (or there is no acceptable conversion) error C2678: binary '<<' : no operator defined which takes a left-hand operand of type 'class ostream_withassign' (or there is no acceptable conversion) error C2665: 'ostream_iterator<struct Man::Data,char,struct std::char_traits<char> >::ostream_iterator<struct Man::Data,char,struct std::char_traits<char> >' : none of the 2 overloads can convert parameter 1 from t ype 'class ostream_withassign' Помогите исправить!!! Пожалуста!!! |
farik
Цитата:
upd И ещё будет неплохо, если оно не будет ничего писать на экран. Ибо при чтении из файла вылезут три сообщения непонятно к чему. |
Вот исправленная программа в ней всеравно ошибка :
error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'class std::istream_iterator<struct Data,char,struct std::char_traits<char> >' (or there is no acceptable conversion) Вот программа: Код:
#include <iostream> |
В целом код кривой и некрасивый. SaveToFile, ShowToFile и SearchFile должны быть статиками, как минимум. Соответственно структура Data должна быть переименована в Man, статическими функциями которой будут три названных выше. Так будет несколько красивше. Либо можно завести класс FileOfMen (или MenStorage :)), которому в конструкторе передавть имя файла; тогда будет оправдано использование функций-членов класса.
А ошибка возникает, потому что итератор pos вы не разименовываете. Т.е. строчка cout << pos, д.б. заменена на cout << *pos. upd Ещё подумалось, раз Data - структура, то operator << и operator >> могут быть и не френдами - незачем, раз все поля открыты. |
Все исправил! Компилируется!!! Но не записывает в файл :o
Вот код,гляньте: Код:
#include <iostream> |
Отформатируйте код нормально. Мне надоело каждый раз когда я его читаю через indent прогонять :) Попробуйте всё заново переписать не смотря на старый код (но учитывая его ошибки), ибо то, что есть сейчас просто ужасно со всех точек зрения.
По вопросу: внимательно посмотрите на код SaveToFile, лишних комментариев не заместно? Ещё у вас по имени искать не будет, посмотрите на предикат. |
что такое предикат
|
Предикат это третий параметр функции find_if. Понятие пришло из матлогики. В вашем случае это структура с говорящим названием Pred.
Делаем вывод, что код вы таки писали не сами. Ибо люди, которые знают, что такое istream_iterator и find_if, как минимум форматируют исходники лучше. Скорее из чужого слепили, причём разбираться не стали почему и что написано, а сразу спросили на форуме. Судя по предыдущим темам, вы вообще напрягаться не любите. |
Время: 19:08. |
Время: 19:08.
© OSzone.net 2001-