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??