C++ 运行时Boost异常

C++ 运行时Boost异常,c++,boost,runtime-error,C++,Boost,Runtime Error,使用此代码: #include <fstream> #include <boost/archive/text_oarchive.hpp> using namespace std; int main() { std::ofstream ofs("c:\test"); boost::archive::text_oarchive oa(ofs); } #包括 #包括 使用名称空间std; int main() { 标准::ofs流(“c:\test”);

使用此代码:

#include <fstream>

#include <boost/archive/text_oarchive.hpp>

using namespace std;

int main()
{
    std::ofstream ofs("c:\test");
    boost::archive::text_oarchive oa(ofs);
}
#包括
#包括
使用名称空间std;
int main()
{
标准::ofs流(“c:\test”);
boost::archive::text\u oarchive oa(ofs);
}
我在运行时执行boost archive行时遇到一个未处理的异常:

boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::archive::archive_exception> >
boost::异常\详细信息::克隆\执行

您需要捕获异常,然后检查其异常代码以查看根本原因。

以下行出错:

 std::ofstream ofs("c:\test");
如果您的文件被调用为
jest
,编译器至少会发出警告;但是
'\t'
——作为插入选项卡的转义,您的错误是未经检查的。简而言之,将不会创建该文件。您可以使用以下方法对此进行测试:

if (ofs.good()) { ... }
现在,由于没有创建文件,您没有有效的迭代器来传递给引发异常的
boost::archive::text\u oarchive

试试这个:

std::ofstream ofs("c:\\test");
//                  --^ (note the extra backslash)
if (ofs.good()) {
    boost::archive::text_oarchive oa(ofs);
    // ...
}
希望这有帮助

PS:我无法阻止自己做的最后一个nit——如果你要用的话

using namespace std;
然后

这已经足够好了。当然,对stream的
进行限定并不是一个错误,但它不是最好的编码样式。但是,您知道使用
名称空间
是不好的,不是吗


PPS:谢谢--
sharptooth
提醒我
\t
会给你一个标签

\t是水平选项卡,因此编译器不太可能感觉到这种气味。您也可以使用c:/test-正斜杠在Windows和Unix系统上都可以用作路径分隔符,不需要引用。确定。虽然很少有人在Windows上使用它。谢谢,在发现异常后,我很快就找到了它(请原谅我问了这个问题,这是一个漫长的一天),但尽管如此,这里还是有一些有用的提示,所以谢谢。但是我很好奇,为什么使用名称空间不好?'using namespace std'将std名称空间中的所有符号转储到全局名称空间,从而造成污染。查找名称空间污染。
ofstream ofs("c:\\test");