gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:02:11 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com