【问题标题】:Cannot Access Private Member: std::copy无法访问私有成员:std::copy
【发布时间】:2012-12-25 00:46:40
【问题描述】:

我正在尝试使用 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>::basic_ios' : 无法访问在类 'std::basic_ios<_elem>' c:\program files (x86)\微软视觉工作室 8\vc\include\fstream 802

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

附加信息:

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

mContent 是一个 TChar 类型的向量。

【问题讨论】:

    标签: c++ vector std ofstream


    【解决方案1】:

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

    【讨论】:

    • 噢!我知道我错过了一些简单的东西。这很有意义。我稍微修改了你的代码,它工作得很好。谢谢!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      • 2020-09-06
      • 1970-01-01
      • 2013-04-02
      • 2012-12-20
      • 2021-12-25
      相关资源
      最近更新 更多