0

std :: copyを使用して、ベクターの内容を出力ファイルにコピーしようとしています。私は次のコードを使用しています:

void save()
{
    std::basic_ofstream<TChar> fo(mFilename.c_str());
    std::copy(mContent.begin(), mContent.end(), fo);
}

問題は、次のエラーが発生することです。

エラー2エラーC2248:'std :: basic_ios <_Elem、_Traits> :: basic_ios':クラスで宣言されたプライベートメンバーにアクセスできません' std :: basic_ios <_Elem、_Traits>'c:\ program files(x86)\ microsoft visual studio 8 \ vc \ include \ fstream 802

私はSOでこれを検索しましたが、パラメーターを渡すときに、誰もが誤ってコピーコンストラクターを使用しているようです。パラメーターを渡していないので、コピーコンストラクターがどのように起動されるか(または起動されるかどうか)がわかりません。

追加情報:

TCharはテンプレート文字であり、通常はchar、int、wchar_tなどのタイプです。この呼び出しコンテキストでは、charを使用しています。

mContentは、TChar型のベクトルです。

4

2 に答える 2

3

std :: ostream_iteratorを使用する必要があります:

void save()
{
    std::basic_ofstream<TChar> fo(mFilename.c_str());
    std::copy(
        mContent.begin(), mContent.end(),
        std::ostream_iterator<mContent::value_type>(fo, " "));
}
于 2012-12-25T00:52:05.973 に答える
2

コピーは、3番目の引数として、出力ストリームではなく出力イテレータを取ります。あなたはそれに出力ストリームを渡しました。エラーは、出力ストリームをイテレータとして使用しようとすると、多くのエラーが発生するためです。それはたまたま最初のものでした。

于 2012-12-25T00:50:28.920 に答える