Использование iostream_operator для записи в файл

277
01 июля 2017, 11:32

Здравствуйте, я пытаюсь записать и прочитать созданный класс WRstrcut, используя ostream_iterator и istream_iterator. С записью проблем нет, а вот с чтением есть. Ошибка такая:

Error C2678 binary '>>': no operator found which takes a left-hand operand of type 'std::istream' (or there is no acceptable conversion) ttttt c:\users\desktop\ttttt\ttttt\wrstruct.h 32 '

Для того , чтобы произвести запись и чтение я перегружаю операторы ввода\вывода в классе.

Почему происходит такая ошибка, подскажите , пожалуйста, как ее исправить?

Код:

#pragma once
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <iterator>
#include <istream>
class WRstruct
{
private:
    std::string name;
    std::string number;
    friend std::ostream& operator<<(std::ostream&, const WRstruct&);
    friend std::istream& operator >> ( std::istream& is, WRstruct&);
public:
    WRstruct(){};
    void write();
    void read();
    ~WRstruct(){};
};
std::ostream& operator<<(std::ostream& os, const WRstruct& p)
{
    os << "User Name: " << p.name << std::endl
        << "Number: " << p.number << std::endl
        << std::endl;
    return os;
}
std::istream& operator >> (std::istream& is, WRstruct& p)
{
    is >>"Say name:">>p.name >>"Say number:">> p.number;
    return is;
}

Функция void read():

void WRstruct::read()
{
    std::vector<WRstruct> vec;
    std::ifstream readFile("temp.txt");
    std::istream_iterator<WRstruct> istr(readFile);
    copy(vec.begin(), vec.end(), istr);
    std::istream_iterator<WRstruct> end_istr;
    copy(istr, end_istr, back_inserter(vec));
    std::ostream_iterator<WRstruct> osIter(std::cout," ");
    copy(vec.begin(),vec.end(),osIter);
}

Функция void write():

void WRstruct::write()
{
    std::vector<WRstruct> vecP;
    std::copy(std::istream_iterator<WRstruct>(std::cin),
    std::istream_iterator<WRstruct>(), std::back_inserter(vecP));
    std::ofstream temp("temp.txt", std::ios::out);
    std::ostream_iterator<WRstruct>temp_itr(temp, "\n");
    std::copy(vecP.begin(), vecP.end(), temp_itr);
}

main():

#include <iostream>
#include "WRstruct.h"
int main()
{
    WRstruct r;
    r.write();
    //r.read();
    return 0;
}
Answer 1

is >>"Say name:">>p.name; - это неправильно. Поток ввода не умеет выводить текст. Разделите вывод и ввод:

cout << "Say name:";
is >> p.name;
READ ALSO
Не компилится solidity

Не компилится solidity

Компилирую вот по этому мануВылетает такая ошибка:

269
C++ Почему не работает предварительное объявление класса?

C++ Почему не работает предварительное объявление класса?

Мне главное чтобы я мог из любого класса связаться с объектом любого другого класса (для этого я делаю наследование)Но запутался как правильно...

288
Как сделать, чтобы открытое миобильное slidemenu можно было скроллить?

Как сделать, чтобы открытое миобильное slidemenu можно было скроллить?

Добрый вечер, столкнулся с проблемойПытаюсь сделать, чтобы в мобильной версии страницы, при открытом slidemenu скроллилось оно, а не содержимое...

259
Вывод данных json полученых ajax&#39;ом

Вывод данных json полученых ajax'ом

День добрыйЕсть небольшой скриптик который с помощью ajax-запроса получает данные посредством api

224