为什么不能构造包含 ostringstream 成员的对象?

2023-12-04

我有以下类示例,是从一个较大的项目简化而来的。它基于一个日志记录框架,该框架使用记录器的范围来终止析构函数中的日志条目。

下面的代码将无法编译,因为构造函数是一个隐式删除的函数(编辑:不正确),这似乎与std::ostringstream目的。我对此感到困惑,因为我认为我应该能够直接构造一个std::ostringstream,这意味着我应该能够直接构造一个Container object.

#include <iostream>
#include <sstream>

class Container {
  public:
    std::ostringstream  bufferStream;

  public:
    Container();    // constructor
    ~Container();
};

Container::Container() {
    bufferStream << "Hello ";
}

Container::~Container() {
    std::cout << bufferStream.str() << " [end]" << std::endl;
}

// === Main method ===

int main() {

    Container().bufferStream << "world";   // works fine

    {                                      // causes tons of compiler errors
        Container cont = Container();
        cont.bufferStream << "world!";
    }

    return 0;
}

请注意,标有“工作正常”的行就是这样做的。它似乎实例化了一个匿名Container对象,其中包含一个新的std::ostringstream,可以直接访问输出“world”。这Container它本身创建消息的“Hello”部分,并且其析构函数刷新缓冲区。

为什么没有第二部分,其中Container对象被命名并保存,运行正确吗?这是我收到的错误示例:

error.cpp: In function ‘int main()’:
error.cpp:28:36: error: use of deleted function ‘Container::Container(const Container&)’
         Container cont = Container();
                                    ^
error.cpp:4:7: note: ‘Container::Container(const Container&)’ is implicitly deleted because the default definition would be ill-formed:
 class Container {
       ^
error.cpp:4:7: error: use of deleted function ‘std::basic_ostringstream<char>::basic_ostringstream(const std::basic_ostringstream<char>&)’
In file included from error.cpp:2:0:
/usr/include/c++/4.8/sstream:387:11: note: ‘std::basic_ostringstream<char>::basic_ostringstream(const std::basic_ostringstream<char>&)’ is implicitly deleted because the default definition would be ill-formed:
     class basic_ostringstream : public basic_ostream<_CharT, _Traits>

... 等等。


这会工作得很好:

Container cont;
cont.bufferStream << "world!";

但是这个:

Container cont = Container();

涉及到复制构造函数。std::ostringstream不可复制构造,这使得Container不可复制构造,因此错误消息谈论如何Container::Container(const Container&)被隐式删除,因为std::basic_ostringstream<char>::basic_ostringstream(const std::basic_ostringstream<char>&)被隐式删除。

请注意,即使该副本将被省略,复制/移动省略的要求是复制/移动必须可以开始。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么不能构造包含 ostringstream 成员的对象? 的相关文章

  • 使用 Unity 在构造函数中使用属性依赖注入

    好的 我在基类中定义了一个依赖属性 我尝试在其派生类的构造函数内部使用它 但这不起作用 该属性显示为 null Unity 在使用 container Resolve 解析实例后解析依赖属性 我的另一种选择是将 IUnityContaine
  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge
  • Unix网络编程澄清

    我正在翻阅这本经典书籍Unix网络编程 https rads stackoverflow com amzn click com 0139498761 当我偶然发现这个程序时 第 6 8 节 第 179 180 页 include unp h
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 如何访问另一个窗体上的ListView控件

    当单击与 ListView 所在表单不同的表单中的按钮时 我试图填充 ListView 我在 Form1 中创建了一个方法以在 Form2 中使用 并将参数传递给 Form1 中的方法 然后填充 ListView 当我调试时 我得到了传递的
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 使用 C 语言使用 strftime() 获取缩写时区

    我看过this https stackoverflow com questions 34408909 how to get abbreviated timezone and this https stackoverflow com ques
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 私有模板函数

    我有一堂课 C h class C private template
  • HttpWebRequest 在第二次调用时超时

    为什么以下代码在第二次 及后续 运行时超时 代码挂在 using Stream objStream request GetResponse GetResponseStream 然后引发 WebException 表示请求已超时 我已经尝试过
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 在客户端系统中安装后桌面应用程序无法打开

    我目前正在使用 Visual Studio 2017 和 4 6 1 net 框架 我为桌面应用程序创建了安装文件 安装程序在我的系统中完美安装并运行 问题是安装程序在其他计算机上成功安装 但应用程序无法打开 edit 在客户端系统中下载了

随机推荐

  • PostgreSQL,通过查询删除表

    我有这样的查询来列出当前数据库中的表 SELECT c relname FROM pg catalog pg class c LEFT JOIN pg catalog pg namespace n ON n oid c relnamespa
  • 有关如何使用正则表达式验证姓名的建议

    我想验证name and surname对于我的 Ruby on Rails 3 应用程序 所以我发布了这个问题 有人建议我阅读程序员对名字的误解文章 现在我遇到了麻烦 验证姓名的正确方法是什么 正则表达式是一种方法 但是我应该注意什么 你
  • offsetHeight 和 clientHeight 之间的区别

    在 javascript dom 中 元素的 offsetHeight 和 clientHeight 有什么区别 客户高度 返回对象可见区域的高度 以像素为单位 该值包含带有内边距的高度 但不包括滚动条 边框和边距 偏移高度 返回对象可见区
  • 当表为空时 DataBodyRange 会导致错误

    晚上好 我有以下按钮来保存表单的寄存器信息 但是在启动第一个记录时 它会抛出错误 错误已发生 91 对象或块变量未建立 并指示突出显示的内容 当已经插入值时它可以正常工作后 问题仅针对第一条记录 请问您能帮我解决这个错误吗 非常感谢 Pri
  • 如何从远程服务器收集 HTML 源响应?

    在我的一个服务器页面的 HTML 代码中 我需要对数据库中的特定项目进行搜索 该数据库位于我自己不拥有的另一台远程服务器中 执行我的请求的搜索类型示例 http www remoteserver com items search php s
  • 找到距离给定点最近的点的最快方法是什么?

    在数据数组中找到距离给定点最近的点的最快方法是什么 例如 假设我有一个数组A3D 点 与往常一样 坐标为 x y 和 z 和点 x p y p z p 我如何找到最近的点A到 x p y p z p 据我所知 最慢的方法是使用线性搜索 还有
  • Flutter Dart 将带有动态键但结构化值的 json 反序列化为 Map

    是否可以将具有动态键但结构化值的 json 反序列化为 flutter dart 中的 Map 我有一个像这样的 json data apple qty 5 price 100 orange qty 2 price 40 我希望将其反序列化
  • 使用适用于 Python 的 cx_Freeze 安装程序添加开始菜单快捷方式

    使用 cx freeze 制作并测试了我的 msi 安装程序后 从最终用户的角度来看 除了一个重要部分之外 一切都正常 安装程序期间无法通过勾选复选框来创建开始菜单或桌面快捷方式 并且这些操作都不是似乎是默认发生的 然而 通过搜寻邮件档案等
  • PHPmailer - 多次发送电子邮件

    我正在使用 PHPmailer 发送电子邮件 到目前为止 我已成功向一个地址发送电子邮件 现在 我想一键发送多封电子邮件 PROBLEM 我尝试使用下面的一些循环发送多封电子邮件 但输出错误 是的 它会发送电子邮件 但仅发送到一个地址 并且
  • 隐藏图表中的元素

    我有一个只读图表来可视化一些数据 我的最终用户希望 过滤 数据 以便一次只能显示数据的子集 我意识到每次应用过滤器时都可以重新绘制整个图表 省略不显示的元素 但我想知道是否有一种方法可以简单地动态 隐藏 一些现有元素 然后重新显示他们 为了
  • jQuery 在 img src 属性中添加 URL

    我只需要一个 jQuery 片段来在 img src 中进行前置 即 img src img picture1 jpg jQuery 代码片段是在这个 url 前面添加 http cdn something com 所以在 jQuery 片
  • 使用 Group By 子查询返回超过 1 个值

    我在使用此表和代码创建查询时遇到一些问题 我知道 GROUP BY Branch BranchName 会导致获取多个记录 但是 如何避免这种情况并在单个查询中做到这一点 我想要得到的是一张桌子 包含分行名称 总付费值 总未付费值 SELE
  • Opscenter 6.0 启动问题

    昨天 我尝试安装 opscenter 并启动现有 DSE 5 0 集群的导入 它失败并出现某些错误 指出安装的版本不是 opscenter 6 0 根本原因 opscenter 安装是从 datastax 社区仓库完成的 而不是企业仓库 我
  • “在非结构或联合中请求成员‘********’”是什么意思?

    对于这个错误的含义有简单的解释吗 request for member in something not a structure or union 我在学习C语言的过程中曾多次遇到过这个词 但我不知道它的含义 如果您在拥有指针时尝试访问实例
  • 在 C# 中使用 Drush 站点安装

    我正在尝试使用 C 中的 Drush 进行 Drupal 站点安装 作为使用 MSI 的完整 Windows Server 站点安装的一部分 我正在使用的 Drush 命令如下 C ProgramData Drush Drush bat y
  • 无法在 Web 服务器上启动调试。操作超时

    我所有的都遇到了这个问题ASP NET网站 我使用的是 Windows 10 并且我的IIS应用程序池停止工作 我在谷歌搜索时发现了很多可能的解决方案 但没有一个对我有用 这不是帐户问题 也不是临时文件中的故障 甚至不是视觉工作室需要重新初
  • Android Java - 如何从 URL 下载 zip 文件?

    嘿 我正在制作一个新项目 需要您从我的 Dropbox 下载一些文件 我添加了一个名为 DownloadFile 的新类 其中包含下载文件的代码 由于某种原因 当我单击下载时 应用程序崩溃了 谢谢 下载文件如下 package com Ma
  • 错误地更新位字段

    我正在尝试解决一个问题 它说 将新变量初始化为值 17512807u 假设我们照常从 0 开始对位进行编号 作为最低有效位 在 右 到 31 最重要 在左边 更新位 18 至 21 的整数值为 8 位 10 到 14 的值为 17 十进制
  • Spring Security 版本 6 存在 SecurityFilterChain 问题

    我正在尝试使用最新版本的 Spring Boot 3 0 6 和 Spring Security 版本 6 制作一个小项目 问题是 Spring 已经弃用了很多有关建立身份验证系统的代码 我们曾经合作过WebSecurityConfigur
  • 为什么不能构造包含 ostringstream 成员的对象?

    我有以下类示例 是从一个较大的项目简化而来的 它基于一个日志记录框架 该框架使用记录器的范围来终止析构函数中的日志条目 下面的代码将无法编译 因为构造函数是一个隐式删除的函数 编辑 不正确 这似乎与std ostringstream目的 我