farik
24-05-2006, 06:49
Есть программа:
#include <iostream.h>
#include <algorithm>
#include <fstream>
#include <string>
#include <iterator>
#include <functional>
#include <windows.h>
#include<istream.h>
using namespace std;
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;
}
class Man{
struct Data {
Data() : age(0) {}
// переменная для возраста
int age;
// переменная для имени
std::string name;
// переменная для фамилии
std::string surname;
friend ofstream& operator << (ofstream& stream, const Data& d)
{
// Записываем возраст
stream<<d.age<<' ';
// Записываем имя
stream<<d.name.c_str()<<' ';
// Записываем фамилию
stream<<d.surname.c_str()<<' ';
return stream;
}
friend fstream& operator << (fstream& 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;
}
friend istream& 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;
}
};
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::SaveToFile(){
ofstream file("c:\\men.txt",ios::out|ios::app);
if(!file){
RussianMessage("Файл не открылся для чтения !!!");
exit(1);
}
file<<data_;
}
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);
}
Она выдает ошибки:
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'
Помогите исправить!!! Пожалуста!!!
#include <iostream.h>
#include <algorithm>
#include <fstream>
#include <string>
#include <iterator>
#include <functional>
#include <windows.h>
#include<istream.h>
using namespace std;
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;
}
class Man{
struct Data {
Data() : age(0) {}
// переменная для возраста
int age;
// переменная для имени
std::string name;
// переменная для фамилии
std::string surname;
friend ofstream& operator << (ofstream& stream, const Data& d)
{
// Записываем возраст
stream<<d.age<<' ';
// Записываем имя
stream<<d.name.c_str()<<' ';
// Записываем фамилию
stream<<d.surname.c_str()<<' ';
return stream;
}
friend fstream& operator << (fstream& 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;
}
friend istream& 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;
}
};
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::SaveToFile(){
ofstream file("c:\\men.txt",ios::out|ios::app);
if(!file){
RussianMessage("Файл не открылся для чтения !!!");
exit(1);
}
file<<data_;
}
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);
}
Она выдает ошибки:
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'
Помогите исправить!!! Пожалуста!!!