2

このコードの使用:

#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> >
4

2 に答える 2

7

次の行に誤りがあります。

 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のは悪いことですよね?

PPS : ありがとうございsharptoothます\t

于 2009-02-17T05:47:24.270 に答える
2

例外をキャッチし、その exception_code を調べて根本原因を確認する必要があります。

于 2009-02-16T23:54:04.853 に答える