无法访问Private Member: std::copy

Cannot Access Private Member: std::copy

本文关键字:std copy Member Private 访问      更新时间:2023-10-16

我试图使用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 8vcincludefstream 802

我在SO上搜索过这个,每个人在传递参数时似乎都不小心使用了复制构造函数。因为我没有传递参数,所以我不确定复制构造函数是如何被触发的(或者它是否被触发了)。

额外的信息:

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

mContent是TChar类型的向量。

您需要使用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, " "));
}

Copy接受输出迭代器而非输出流作为第三个实参。你给它传递了一个输出流。之所以会出现这个错误,是因为如果您尝试将输出流用作迭代器,就会出现大量错误。这刚好是第一个