Исключение Boost во время выполнения
-
23-08-2019 - |
Вопрос
Используя этот код:
#include <fstream>
#include <boost/archive/text_oarchive.hpp>
using namespace std;
int main()
{
std::ofstream ofs("c:\test");
boost::archive::text_oarchive oa(ofs);
}
Я получаю необработанное исключение во время выполнения при выполнении строки архива повышения:
boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::archive::archive_exception> >
Решение
Следующая строка ошибочна:
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);
// ...
}
Надеюсь это поможет!
ПС: И последнее, от чего я не мог удержаться — если вы собираетесь использовать
using namespace std;
затем
ofstream ofs("c:\\test");
достаточно хорош.Конечно, квалификация не является ошибкой. ofstream
, но это был бы не лучший стиль кодирования.Но тогда вы знаете, используя using namespace
это плохо, не так ли?
ППС:Спасибо -- sharptooth
за то, что напомнил мне об этом \t
дает вам вкладку!
Другие советы
Вам необходимо перехватить исключение, а затем проверить его код_исключения, чтобы определить основную причину.