Комментарии шли в правильном направлении, чтобы показать, где проблема. Но решение намного проще, у вас уже есть свои потоковые операторы, так что просто используйте их!
Для записи в файл вы можете использовать:
file << user << std::endl;
а потом просто прочитать:
file >> user;
Чтобы это продолжало работать, вам понадобятся некоторые вещи:
- Пользователь никогда не должен вводить пробел в любом месте своего пароля.
- Вы должны убедиться, что запись и чтение всегда выполняются в одном и том же порядке.
В качестве альтернативы вы можете создать преобразование из строки и в строку по строкам:
static const char SEP1 = ' ', SEP2 = '\r';
friend std::string to_string(const User& u)
{
std::string result = u.login + SEP1 + u.password + SEP2;
return result;
}
explicit User(std::string line)
{
size_t pos1 = s.find(SEP1);
size_t pos2 = s.find(SEP2, pos1);
login = s.substr(0, pos1);
password = s.substr(pos1+1, pos2-pos1);
}
Тогда вы можете в своей основной части прочитать блок данных и просто создать из него пользователя, в качестве альтернативы вы можете преобразовать пользователя в строку перед записью. Прелесть этого подхода в том, что вы выбираете разделители, и они стабильны между функциями.