Stephen Prata C++ Rozdzial 17 cwiczenie programistyczne 7

0

Witam mam nastepujacy kod żrodłowy :

#include <iostream>
#include <algorithm>
#include <iterator>
#include <cstdlib>
#include <string>
#include <vector>
#include <cstdlib>
#include <fstream>
#include <sstream>
#include <cstring>
#include <cctype>
using namespace std;


void show_vstr(const string &s);
int main()
{
    vector<string> vostr;
    string temp;


    cout<<"podaj lancuchy (aby zakonczyc , wprowadz pusty wiersz):\n";
    while(getline(cin,temp)&&temp[0]!='\0')
    {
        vostr.push_back(temp);
    }
    cout<<"oto twoje dane wejsciowe:\n";
    for_each(vostr.begin(),vostr.end(),show_vstr);

    ofstream fout("lancuchy.dat",ios_base::out|ios_base::binary);
    for_each(vostr.begin(),vostr.end(),Store(fout));
    fout.close();

    vector<string> vistr;
    ifstream fin("lancuchy.dat",ios_base::in|ios_base::binary);
    if(!fin.is_open())
    {
        cerr<<"nie mozna otworzyc pliku do odczytu!\n";
        exit(EXIT_FAILURE);
    }
    GetStr(fin,vistr);
    cout<<"oto lancuchy odczytane z plik:\n";
    for_each(vistr.begin(),vistr.end(),show_vstr);
    return 0;
}
void show_vstr(const string &s)
{
    cout<<s<<endl;
}

Tresc zadania:
"należy:
-zdefiniowac objekt funkcyjny Store zapisujacy dane lancuchowe do pliku, konstruktor objektu Store powinien pobierac obiekt klasy ofstream a przeciazona funkcja operator()(const string & ) powinna wskazywac lancuch do zapisu . rozsadnym rozwiazaniem bedzie najpierw zapisanie pliku rozmiaru lancucha a nastepnie jego tresci, jesli przykladowo zmienna len przechowuje rozmiar lancucha mozna by uzyc nastepujacych instrukcji :
os.write((char*)&len,sizeof(size_t));
os.write(s.data(),len);
-funkcja składowa data() zwraca wskaznik na tablice zawierajaca znaki danego lancucha , jest ona podobna do metody c_str(), z tym ,że ostatnia dolacza znak pusty
-dalej juz rozkminie xd
oto co udało mi się napisać choć cos nie działa xd:

class Store
{


public:
    ofstream os;
    explicit Store(const ofstream &stream){os=stream;}
    void operator()(const string &s);
    
};
   void Store::operator()(const string &s)
    {
        int len=s.size();
        os.write((char*)&len,sizeof(size_t));
        os.write(s.data(),len);
-----i tak dalej 

    }

problem jest gdzies w konstruktorze, gdyz klasa ofstream nie ma przeciazonego operatora przypisania , pomógłby ktos z tym zadaniem??

1 użytkowników online, w tym zalogowanych: 0, gości: 1