未调用复制构造函数,但编译器抱怨没有

2024-01-04

给出以下代码:

#include <boost/noncopyable.hpp>

enum Error { ERR_OK=0 };

struct Filter : private boost::noncopyable
{
  Filter() {}
  virtual ~Filter() {}

  virtual int filter(int* data) const = 0;

};

struct  SpecialFilter : public Filter, private boost::noncopyable
{
  inline SpecialFilter(unsigned int min, unsigned int max) : min(min), max(max) {}
  virtual ~SpecialFilter() {}

  virtual int filter(int* data) const
  {
    // ...
    return ERR_OK;
  }

  unsigned int min;
  unsigned int max;
};

struct AClass
{
  AClass() {}
  AClass(const AClass& other) {}
  ~AClass() {}

  int specialFilter(int channel, int minThreshold, int maxThreshold)
  {
    // ...
    return filter(channel, SpecialFilter(123, 321));
  }

  int filter(int channel, const Filter& filter)
  {
    // ...
    return ERR_OK;
  }

};

我的编译器(GCC 4.2)抱怨:

- warning: direct base ‘boost::noncopyable_::noncopyable’ inaccessible in ‘SpecialFilter’ due to ambiguity
- noncopyable.hpp: In copy constructor ‘Filter::Filter(const Filter&)’:
- noncopyable.hpp:27: error: ‘boost::noncopyable_::noncopyable::noncopyable(const boost::noncopyable_::noncopyable&)’ is private
- synthezised method first required here: [return filter(channel, SpecialFilter(123, 321));]

但我不调用复制构造函数!


你永远不会调用复制构造函数。编译器总是隐式地为您调用复制构造函数。因此,您需要学会识别可能被调用的情况。

当您将 const 引用附加到临时对象时

...
return filter(channel, SpecialFilter(123, 321));
...

编译器有权执行临时对象的复制,并需要一个可访问的复制构造函数(即使它不会被实际调用)。这就是导致您的情况出现问题的原因。

换句话说,当您使某种类型不可复制时,您也就放弃了将 const 引用附加到该类型的临时对象的可能性。

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

未调用复制构造函数,但编译器抱怨没有 的相关文章

  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 无法执行 HTTP 请求:Flink 中等待来自池的连接超时

    我正在研究一个将一些文件上传到 s3 存储桶的应用程序稍后 它从 s3 存储桶读取文件并将其推送到我的数据库 我在用着弗林克1 4 2 and fs s3a API用于从 s3 存储桶读取和写入文件 将文件上传到 s3 存储桶工作正常 没有
  • Jquery 表单插件还是 Jquery 序列化?

    我想知道有什么优点jQuery 表单插件 http jquery malsup com form getting started已经结束了序列化 http api jquery com serializeArray 如果我选择使用表单插件
  • jquery datepicker突出显示假期

    我正在尝试制作一个 jquery 日期选择器日历 它会突出显示假期 并在日期选择器上的日期悬停时将假期名称作为工具提示 假期日期来自 php 文件 holidays php 我的问题是 我似乎无法突出显示所有假期 它只突出显示一个日期 更具
  • 动画旋转 UIImageView

    我想旋转一个UIImageView左 右大约 10 度 但有一个平滑的动画 而不是我看到的突然转向 player transform CGAffineTransformMakeRotation angle UIView beginAnima
  • 如何在 IntelliJ IDEA 中多次运行同一个项目?

    我正在使用 IntelliJ IDEA 开发应用程序的客户端 为了调试我需要运行多个客户端 我想使用 IntelliJ IDEA 不可能在不同的窗口中运行相同的项目 那么如何运行多个客户端进行调试呢 You can 运行或调试 https
  • 如何在 php 中使用 C modf 函数?

    好像没有一个吧 使用 PHP 的fmod http php net manual en function fmod php
  • Redis 中的 AOF 和 RDB 备份

    这个问题是关于Redis持久化的 我使用 Redis 作为社交网站的 快速后端 这是设置的单个服务器 我一直在稳步地将 PostgreSQL 的职责转移到 Redis 目前在etc redis redis conf 追加设置设置为appen
  • SoundCloud,通过 api 下载或流式传输文件

    我尝试使用 download url 从 soundcloud 获取文件 我收到 重定向 或 401 未经授权 如何将其下载 流式传输到客户端 thanks 如果您收到 401 响应 那么您应该包括您的client id在请求中 它也可能是
  • 将文本文件嵌入到可以使用 fopen 访问的 exe 中

    我想将包含一些数据的文本文件嵌入到我的程序中 我们称之为 data txt 该文本文件通常加载一个函数 该函数需要文本文件的文件名作为输入 并最终使用 fopen 调用打开 FILE name fopen data txt 我无法真正更改此
  • 通过管道的 gnuplot C++ 接口 - 无法打开 wgnuplot

    我正在尝试从我的 C 程序中在 gnuplot 中实时绘制图形 我已经安装了 gnuplot 4 6 并且能够打开 gnuplot exe 并绘制图形 但是我无法通过管道打开应用程序 这是我使用过的代码 include
  • 尝试使用 PUT 将 PDF 作为 Blob 上传到 S3 存储桶时禁止 403

    我正在尝试做什么 从浏览器客户端上传 PDF 文件 而不会暴露任何凭据或任何令人讨厌的内容 基于this https github com jbesw askjames s3uploader 我以为可以做到 但对我来说似乎不起作用 前提是
  • 在 Java 中在屏幕上绘图

    我想用 Java 创建一个帮助应用程序 其行为如下 每当通过全局快捷方式调用时 它都可以在屏幕上绘制一些文本 不是在其自己的应用程序窗口上 而是在屏幕顶部 类似的帖子是here https stackoverflow com questio
  • 如何引发张量流内存不足错误的异常?

    我正在使用以下命令运行几个张量流推理sess run 在一个循环中 碰巧有些推理对我的 GPU 来说太重了 我收到如下错误 2019 05 23 15 37 49 582272 E tensorflow core common runtim
  • 在 Selenium 中,如何关闭日志记录?

    我正在使用以下方法 set browser log level off 但我的日志级别继续包含信息 当我的测试输入登录密码时 我试图抑制日志记录和 最后 4 个命令 显示 http release seleniumhq org seleni
  • Google Apps Marketplace (GAMv2) 的设置网址不会重定向

    我已经为 Google Apps Marketplace GAMv2 创建了一个测试列表 并指定了一个设置网址 使用 测试安装流程 按钮进行测试时 会弹出授权屏幕 单击 接受 按钮会将我带到一个弹出窗口 确认已添加应用程序 第二个弹出窗口上
  • 如何使用 scala.js 读取文本文件?

    基本上我想弄清楚我需要传递什么onload method def selectedFile e ReactEventI val reader new dom FileReader reader readAsText e currentTar
  • 其他端口上的 file_get_contents

    我必须通过 80 联系位于不同端口上的服务 但函数 file get contents 返回错误 无法打开流 连接被拒绝 url http nexusdigital agency 81 API result file get content
  • 具有引脚配对功能的 Android BLE 外设

    我正在开发一个 Android 应用程序 它充当具有服务的蓝牙外围设备角色 当我开始投放广告时 搜索提供此服务的设备的其他 Android 设备可以看到我的设备 并且无需 PIN 码即可与其配对 好的 但如何启用 PIN 配对呢 当使用特定
  • Android 上的 NoClassDefFoundError

    我不知道我做错了什么 我想在我的 Android 项目中创建一个路径变量 但每次我都会收到 NoClassDefFoundError test test turns This is a simple String List
  • 未调用复制构造函数,但编译器抱怨没有

    给出以下代码 include