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