Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: файлы
Показать сообщение отдельно

Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вот исправленная программа в ней всеравно ошибка :
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>
#include <algorithm>
#include <fstream>
#include <string>
#include <vector>
#include <iterator>
#include <functional>

using namespace std;

#include "windows.h"

void RussianMessage(char *message){
    char rmessage[256];
    CharToOem(message,rmessage);
    cout<<rmessage;
}

int RussianMenu(){
    RussianMessage("\nВведите 1 для добавления новой структуры в файл\n");
    RussianMessage("Введите 2 для показа всех структур из файла\n");
    RussianMessage("Введите 3 для поиска\n");
    RussianMessage("Введите 4 для выхода\n");
    int choice;
    cin>>choice;
    return choice;
}

struct Data {
    Data() : age(0) {}
    // переменная для возраста
    int age;
    // переменная для имени
    std::string name;
    // переменная для фамилии
    std::string surname;

    

	friend ofstream& operator << (ofstream&, const Data&);  
	friend ostream& operator << (ostream&, const Data&);
	friend ofstream& operator >> (istream&,  Data&);


};

ostream& operator << (ostream& stream, const Data& d)
{

    RussianMessage("\nИмя: ");
    stream<<d.name.c_str();

    RussianMessage("\nФамилия: ");
    stream<<d.surname.c_str();

    RussianMessage("\nВозраст: ");
    stream<<d.age;
    return stream;

}

ofstream& operator << (ofstream& stream, const Data& d)
{
    // Записываем возраст
    stream<<d.age<<' ';
    // Записываем имя
    stream<<d.name.c_str()<<' ';
    // Записываем фамилию
    stream<<d.surname.c_str()<<' ';
    return stream;

}

ofstream& operator >> (istream& stream,  Data& d)
{
    stream>>d.age;
    stream>>d.name;
    stream>>d.surname;

//    return stream;
}

struct Pred:binary_function<Data,std::string, bool> {

    Pred(){}

    bool operator () (const Data& d, std::string str) const
    {
        return ( d.surname == str)? true : false;

    }
};

class Man{
    Data data_;
    
public:
    // конструктор с параметрами
    Man(char *n,char *s,int a);
    // конструктор
    Man();
    // функция ввода данных 
    void Put();
    // функция показа данных
    void Show();
    // функция сохранения в файл
    void SaveToFile();
    // функция показа содержимого файла
    void ShowFromFile();
    void SearchFile();

};
// конструктор
Man::Man(){}

// конструктор с параметрами
Man::Man(char *n,char *s,int a){
    data_.name.assign(n);
    data_.surname.assign(s);
    data_.age = a;
}
    


// функция ввода данных 
void Man::Put(){
    std::string temp;
    RussianMessage("\nВведите имя:\n");
    cin>>temp;

    data_.name.assign(temp);

    
    RussianMessage("\nВведите фамилию:\n");
    cin>>temp;

    data_.surname.assign(temp);

    RussianMessage("\nВведите возраст\n");
    cin>>data_.age;
}

// функция показа данных
void Man::Show(){
    RussianMessage("\nИмя:\n");
    cout<<data_.name;
    RussianMessage("\nФамилия:\n");
    cout<<data_.surname;
    RussianMessage("\nВозраст:\n");
    cout<<data_.age<<"\n";
}
// функция сохранения в файл
void Man::SaveToFile(){
    
    ofstream file("c:\\men.txt",ios::out|ios::app);
    if(!file){
        RussianMessage("Файл не открылся для чтения !!!");
        exit(1);
    }
    
//    file<<data_;
}
//****************************poisk***********************************************************
void Man::SearchFile()
{
    std::string surname;
    
    fstream file("C://men.txt",ios::in);
    if(!file){
        RussianMessage("Файл не открылся для чтения !!!");
        exit(1);
    }

    istream_iterator<Data> first(file), last , pos;

        RussianMessage("Введите фамилию:"); 
        cin>>surname;

        pos = std::find_if(first,last,bind2nd(Pred(),surname));

        if(pos == last)
            RussianMessage("\nТакого сотрудника нет!\n");   
        else
            cout<<pos; 
        
    
    }
//  *******************************************************************************************************************
        // функция показа содержимого файла
        void Man::ShowFromFile(){
            fstream file("C://men.txt",ios::in);
            if(!file){
                RussianMessage("Файл не открылся для чтения !!!");
                exit(1);
            }

             istream_iterator<Data> first(file), last;

            copy(first,last, ostream_iterator<Data>(cout,"\n"));
            
        }
int main(){
    
Man a;
do{
    switch(RussianMenu()){

case 1: // Добавление записи
    a.Put();
    a.SaveToFile();
    break;
case 2: // Показ всех записей
    a.ShowFromFile();
    break;
case 3:
    a.SearchFile();
    break;
case 4://  Прощание с пользователем
    RussianMessage("До Свидания\n");
    return 0;
default: // Неправильный ввод
    RussianMessage("Неверный Ввод\n");
                    }

}while(1);


}
Помогите пожалуста!!!

Отправлено: 20:42, 24-05-2006 | #3

Название темы: файлы