无法访问私有成员:std :: copy

时间:2012-12-25 00:46:41

标签: c++ vector std ofstream

我正在尝试使用std :: copy将向量的内容复制到输出文件中。我正在使用以下代码:

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

问题是,我收到此错误:

错误2错误C2248:'std :: basic_ios&lt; _Elem,_Traits&gt; :: basic_ios':无法访问类'std :: basic_ios&lt; _Elem,_Traits&gt;'中声明的私有成员c:\ program files(x86)\ microsoft visual studio 8 \ vc \ include \ fstream 802

我在SO上搜索了这个,并且每个人在传递参数时似乎都意外地使用了复制构造函数。由于我没有传递参数,我不确定复制构造函数是如何被触发的(或者它是否被触发)。

其他信息:

TChar是一个模板字符,通常是char,int,wchar_t等类型....在这个调用上下文中,我使用的是char。

mContent是TChar类型的向量。

2 个答案:

答案 0 :(得分: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, " "));
}

答案 1 :(得分:2)

Copy将输出迭代器作为输出流作为第三个参数。你传递了一个输​​出流。该错误是因为如果您尝试将输出流用作迭代器,则会发生许多错误。这恰好是第一个。