Вопрос

Используя этот код:

#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 дает вам вкладку!

Другие советы

Вам необходимо перехватить исключение, а затем проверить его код_исключения, чтобы определить основную причину.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top