ja to mogę mieć wszystko na zmiennej typu string nie koniecznie AnsiString, tyle że chce uniknać czegoś takiego że jestem ograniczony powiedzmy do 512 znaków i tyle.
Moja uwaga nie dotyczyła AnsiStringa tylko właśnie tablicy Tytul, która jakby nie patrzeć ogranicza cię to tych 255 znaków.
a miejsce w którym mi wyżucało błąd to:
Nie widzę tam błędów. Załączyłeś nagłówek <list>?
nie mam pojęcia nawet jakie pliki nagłówkowę muszę dołączyć
TU znajdziesz odpowiedź.
chce po prostu zrobić jakiś prosty format binarny, czy ktoś mógł by coś zaproponować ??
Np. tak:
struct Potwor
{
string nazwa;
int sila;
istream& load(istream &is)
{
int n;
int c;
nazwa.clear();
is.read((char*)&sila,sizeof(int));
is.read((char*)&n,sizeof(int)); //<--- czyta ilość znaków
nazwa.reserve(n); //<--- opcjonalnie
while(n-- > 0 && (c = is.get()) != EOF) //<--- czyta n znaków do 'nazwa'
nazwa.push_back(c);
return is;
}
ostream& save(ostream &os)
{
os.write((char*)&sila,sizeof(int));
int n = nazwa.size();
os.write((char*)&n,sizeof(int)); //<--- zapisuje długość 'nazwa'
os.write(nazwa.c_str(),n); //<--- zapisuje n znaków z 'nazwa'
return os;
}
};
Zapis:
Potwor obj;
obj.nazwa = "1234567890";
obj.sila = 666;
ofstream os("test.bin");
obj.save(os);
Odczyt:
ifstream is("test.bin");
obj.load(is);
EDIT:
Opcja nieco bardziej elegancka:
template<typename T> istream& read_obj(istream &is,T &obj)
{
return is.read((char*)&obj,sizeof(obj));
}
template<> istream& read_obj<string>(istream &is,string &obj)
{
int n;
int c;
obj.clear();
is.read((char*)&n,sizeof(int));
obj.reserve(n);
while(n-- > 0 && (c = is.get()) != EOF)
obj.push_back(c);
return is;
}
template<typename T> ostream& write_obj(ostream &os,T &obj)
{
return os.write((char*)&obj,sizeof(obj));
}
template<> ostream& write_obj<string>(ostream &os,string &obj)
{
int c = obj.size();
return os.write((char*)&c,sizeof(int)).write(obj.c_str(),c);
}
struct Potwor
{
string nazwa;
int sila;
istream& load(istream &is)
{
read_obj(is,sila)
return read_obj(is,nazwa);
}
ostream& save(ostream &os)
{
write_obj(os,sila);
return write_obj(os,nazwa);
}
};