Имя пользователя:
Пароль:
 

Показать сообщение отдельно

редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Sir Z
Предлагаю вам ознакомиться с тем как представляются строки в памяти. А представляются они как правило указателем на первый символ строки и длиной строки. т.е. условно говоря строка представляет из себя
Код: Выделить весь код
class string
{
    char * data;
    size_t len;
public:
    // ...
};
Когда вы записываете свою структуру в файл (скорее всего делая fstream::write) вы записываете только 8 байт, а не саму строку. В любом случае придётся делать некий метод сериализации/десериализации.

Примерно так:
Код: Выделить весь код
class dep{
	AnsiString name;
	int Sum;
	//...
	AnsiString person;
public:
	AnsiString get_name();
	int get_sum();
	//...

	// конструктор из файла
	// можно и простым методом оформить
	dep(std::fstream &s)
	{
		s.read(&Sum, sizeof(sum));
		// и так для всех POD-данных
		size_t len;
		s.read(&len, sizeof(len));
		name.SetLength(len);
		s.read(name.data(), len);
	}

	// метод для сохранения в файл
	void serialize(std::fstream &s)
	{
		s.write(&Sum, sizeof(sum));
		// ...
		size_t len = name.Length();
		s.write(&len, sizeof(len));
		s.write(name.data(), len);
	}
}
P.S. Нелогично использовать борландовский AnsiString со стандартными файловыми потоками. Перейдите либо на связку std::string/std::fstream, либо на AnsiString/TFileStream, будет смотреться всё гораздо более цельно.

-------
http://ivank.ru


Последний раз редактировалось ivank, 04-11-2006 в 17:19.


Отправлено: 23:15, 02-11-2006 | #2