Следующая строка с ошибкой:
std::ofstream ofs("c:\test");
Компилятор уже выплюнуть предупреждение (по крайней мере), если файл был назван jest
; но '\t'
- это побег для вставки вкладки, ваша ошибка идет неотображаемой. Короче говоря, файл не будет создан. Вы можете проверить это с помощью:
if (ofs.good()) { ... }
Теперь, так как файл не был создан, вы не имеете действительный итератор, чтобы пройти на boost::archive::text_oarchive
, который бросает исключение.
Попробуйте это:
std::ofstream ofs("c:\\test");
// --^ (note the extra backslash)
if (ofs.good()) {
boost::archive::text_oarchive oa(ofs);
// ...
}
Надеется, что это помогает!
PS: Окончательный нит я не мог остановить себя от делать - если вы собираетесь использовать
using namespace std;
затем
ofstream ofs("c:\\test");
достаточно хорошо. Конечно, это не ошибка для квалификации ofstream
, но это не лучший стиль кодирования. Но тогда вы знаете, что использование using namespace
- это плохо, не так ли?
PPS: Спасибо - sharptooth
за напоминание мне, что \t
получает вас вкладку!
\ t - горизонтальная ТАБ, поэтому компилятор очень маловероятен для восприятия запаха. – sharptooth
Взрыв на! Спасибо sharptooth. – dirkgently
Вы также можете использовать c:/test - прямая косая черта работает как в Windows, так и в Unix-системах как разделитель путей и не требует цитирования. – Ferruccio