c++ - 有人提出为什么我的代码在 basic_ios 和 sstream 中产生错误吗?

标签 c++ compiler-errors std stringstream

我得到了以下错误,在花了数周时间(非常兼职)从我的代码中排除错误后,情况略有改善:

1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\sstream(451) : error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'
1>        with
1>        [
1>            _Elem=char,
1>            _Traits=std::char_traits<char>
1>        ]
1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ios(151) : see declaration of 'std::basic_ios<_Elem,_Traits>::basic_ios'
1>        with
1>        [
1>            _Elem=char,
1>            _Traits=std::char_traits<char>
1>        ]
1>        This diagnostic occurred in the compiler generated function 'std::basic_ostringstream<_Elem,_Traits,_Alloc>::basic_ostringstream(const std::basic_ostringstream<_Elem,_Traits,_Alloc> &)'
1>        with
1>        [
1>            _Elem=char,
1>            _Traits=std::char_traits<char>,
1>            _Alloc=std::allocator<char>
1>        ]

我正在从 CLI 迁移到 std:: 类,我对此经验更少。

我认为它所说的“此诊断发生在编译器生成的函数中”所指的函数是我的 std::ostringstream os;

我使用 os 如下:

        os << "Level: " << levelName << ", contains unexpected header at line " << (numMatched + 1)
            << "\nExpected:\n" << longStringHeader;
        addToErrorSTDstring(os);

因为 std::string 连接在每次添加时排成一行。

我使用 ostringstream 的唯一方法是

bool LevelParser::addToErrorSTDstring(std::ostringstream os){

我相信 ildjarn 敏锐地认为这是我的问题。

最佳答案

该错误表明您正在尝试复制 std::ostringstream 的实例,但所有标准流都是不可复制对象(在 C++11 中然而,它们是可移动的)。

这就是问题的根源,但在没有看到您的实际代码的情况下,我们无法为您提供有关如何修复它的具体建议


EDIT(响应 OP 的编辑):

addToErrorSTDstring 无疑采用 std::ostringstream 值,即具有如下签名:

T addToErrorSTDstring(std::ostringstream os);

相反,您需要通过引用传递它,即将签名更改为:

T addToErrorSTDstring(std::ostringstream const& os);

或:

T addToErrorSTDstring(std::ostringstream& os);

(取决于您如何使用它)。

如果您是 C++ 的新手,那么您需要停下手头的工作,复习一下语言基础知识,例如引用和常量正确性。

关于c++ - 有人提出为什么我的代码在 basic_ios 和 sstream 中产生错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8143424/

相关文章:

c++ - 对象/指针 vector 的问题(实现复合设计模式)

c++ - 如何合并 qtable 行的两个单元格?

C++ cin >> double 不科学

java - 编译Java程序时遇到问题

compilation - 在作为框返回的自身上实现迭代器 - 尽管已实现,但未实现有关迭代器的编译错误

c++ - token 前的预期不合格 ID ... 'std::'

c++ - std::any_of 与顺序执行策略一起使用时是否保证迭代顺序?

c++ - 在两个文件中查找不同的字符串 - C++

c++ - C++:在数组中输入数字时,第一个数字为0

c++ - 为什么这告诉我 “gender”是在线上未声明的标识符