C++之对象包含与成员函数不兼容的类型限定符---补充(5)《Effective C++》

2023-10-31

C++值对象那个包含与成员函数不兼容的类型限定符:

在上篇博客中,运行代码时候,由于没有对show函数添加const,结果突然报了一个错误:对象包含与成员函数不兼容的类型限定符,所以本篇博客进行一个快速补充!
在解释这个问题之前,我们先来看看如下代码,到底有什么问题呢?

#include <iostream>
#include <string>
using namespace std;
class Base{
public:
    Base(){
        cout << "=====Base的构造函数=====" << endl;
    }
    Base(int aa, int bb) :a(aa), b(bb){
        cout << "=====Base的构造函数=====" << endl;
    }
    void show(){
        cout << a << " " << b << endl;
    }
    ~Base(){
        cout << "=====Base的析构函数=====" << endl;
    }
private:
    int a;
    int b;
};
void hello(const Base& b){
    cout << endl;
    cout << "=====hello=====" << endl;
    b.show();
    cout << "---------------" << endl;
}

int main(){
    Base b(1, 2);
    hello(b);
    return 0;
}

当上面的代码在运行的时候就可以发现,编译器报错啦!在hello函数中的b.show()报错,什么错误呢?对象包含与成员函数不兼容的类型限定符,这是几个意思?
如果我们将代码修改一下呢?在const函数中调用non-const函数,可以发现有什么问题呢?代码如下:

#include <iostream>
#include <string>
using namespace std;
class Base{
public:
    Base(){
        cout << "=====Base的构造函数=====" << endl;
    }
    Base(int aa, int bb) :a(aa), b(bb){
        cout << "=====Base的构造函数=====" << endl;
    }
    void show()const {
        cout << a << " " << b << endl;
        hello1();
    }
    void hello1(){
        cout << a << " " << b << endl;
    }
    ~Base(){
        cout << "=====Base的析构函数=====" << endl;
    }
private:
    int a;
    int b;
};
void hello(const Base& b){
    cout << endl;
    cout << "=====hello=====" << endl;
    b.show();
    cout << "---------------" << endl;
}

int main(){
    Base b(1, 2);
    hello(b);
    return 0;
}

Base类中的show函数中的hello1()函数报错了,什么错误呢?看一下:对象含有与成员 函数 “Base::hello” 不兼容的类型限定符,因为const函数中不能调用non-const函数。
总结了一下这种类型的错误,参照大家的博客,可以发现这种解释为:
1)const对象只能调用const函数;
2)如果const函数中不小心修改了类成员或者调用了非常量函数,编译器会找出这类错误。

参考博客:http://blog.csdn.net/wonengguwozai/article/details/51957077

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

C++之对象包含与成员函数不兼容的类型限定符---补充(5)《Effective C++》 的相关文章

  • OpenCv读/写视频色差

    我试图简单地使用 openCV 打开视频 处理帧并将处理后的帧写入新的视频文件 我的问题是 即使我根本不处理帧 只是打开视频 使用 VideoCapture 读取帧并使用 VideoWriter 将它们写入新文件 输出文件看起来比输入更 绿
  • 迭代变量并查找特定类型实例的技术

    我想迭代进程中内存中的变量 通过插件动态加载 并查找特定类型的实例 以前我可以找到特定类型 或内存中的所有类型 我可以创建类型的实例 我可以获取作为不同类型的字段包含的实例 但我无论如何都不知道只是 搜索 特定类型的实例 一种方法是使用 W
  • 如何在 Android NDK 中创建新的 NativeWindow 而无需 Android 操作系统源代码?

    我想编译一个 Android OpenGL 控制台应用程序 您可以直接从控制台启动 Android x86 运行 或者从 Android x86 GUI 内的 Android 终端应用程序运行 这个帖子 如何在 Android NDK 中创
  • 构造函数中显式关键字的使用

    我试图了解 C 中显式关键字的用法 并查看了这个问题C 中的explicit关键字是什么意思 https stackoverflow com questions 121162 但是 那里列出的示例 实际上是前两个答案 对于用法并不是很清楚
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • POCO HTTPSClientSession 发送请求时遇到问题 - 证书验证失败

    我正在尝试使用 POCO 库编写一个向服务器发出 HTTPS 请求的程序 出于测试目的 我正在连接到具有自签名证书的服务器 并且我希望允许客户端进行连接 为了允许这种情况发生 我尝试安装InvalidCertificateHandler这是
  • 如何从网站下载 .EXE 文件?

    我正在编写一个应用程序 需要从网站下载 exe 文件 我正在使用 Visual Studio Express 2008 我正在使用以下代码 private void button1 Click object sender EventArgs
  • C 语言中 =+(等于加)是什么意思?

    我碰到 与标准相反 今天在一些 C 代码中 我不太确定这里发生了什么 我在文档中也找不到它 In ancientC 版本 相当于 它的残余物与最早的恐龙骨头一起被发现 例如 B 引入了广义赋值运算符 使用x y to add y to x
  • 如何将“外部模板”与由同一类中的模板化成员使用的嵌套类一起使用?

    首先 一些背景信息 我尝试以 Herb Sutter 在他的解决方案中介绍的方式使用 Pimpl 习语 得到了 101 http herbsutter com gotw 101 这在头文件中看起来像这样 include pimpl h h
  • 即使手动设置显示环境变量后,WSL Ubuntu 也会显示“错误:无法打开显示”

    我在 WSL Ubuntu 上使用 g 我使用 git 克隆了 GLFW 存储库 使用了ccmake命令配置并生成二进制文件 然后使用make在 build 目录中最终创建 a文件 我安装了所有OpenGL相关的库 usr ld 我不记得我
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • C# 中条件编译符号的编译时检查(参见示例)?

    在 C C 中你可以这样做 define IN USE 1 define NOT IN USE 1 define USING system 1 system 1 IN USE 进而 define MY SYSTEM IN USE if US
  • 通过 NHibernate 进行查询,无需 N+1 - 包含示例

    我有一个 N 1 问题 我不知道如何解决它 可以在这个问题的底部找到完全可重复的样本 因此 如果您愿意 请创建数据库 设置 NUnit 测试和所有附带的类 并尝试在本地消除 N 1 这是我遇到的真实问题的匿名版本 众所周知 这段代码对于帮助
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • 耐用功能是否适合大量活动?

    我有一个场景 需要计算 500k 活动 都是小算盘 由于限制 我只能同时计算 30 个 想象一下下面的简单示例 FunctionName Crawl public static async Task
  • 当前的 x86 架构是否支持非临时加载(来自“正常”内存)?

    我知道有关此主题的多个问题 但是 我没有看到任何明确的答案或任何基准测量 因此 我创建了一个处理两个整数数组的简单程序 第一个数组a非常大 64 MB 第二个数组b很小 无法放入 L1 缓存 程序迭代a并将其元素添加到相应的元素中b在模块化
  • 结构体指针的动态数组

    我必须使用以下代码块来完成学校作业 严格不进行任何修改 typedef struct char firstName char lastName int id float mark pStudentRecord pStudentRecord
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐

  • MATLAB中的polyfit函数的使用方法

    MATLAB中的polyfit函数的使用方法 在MATLAB中polyfit函数是用来进行多项式拟合的 其数学原理是基于最小二乘法进行拟合的 具体使用语法是 p polyfit x y n 其中x y表示需要拟合的坐标点 大小需要一样 n表
  • 数据库Topic推荐-AMiner

    AMiner平台 https www aminer cn 由清华大学计算机系研发 拥有我国完全自主知识产权 平台包含了超过2 3亿学术论文 专利和1 36亿学者的科技图谱 提供学者评价 专家发现 智能指派 学术地图等科技情报专业化服务 系统
  • 基于Matlab的倍相buck降压电路仿真

    引言 为何会有这篇文章 主要是因为在组装个人主机的时候 电源上一直烦恼如何选择 市面上的主板供电电路各不相同 像微星很喜欢用倍相电路 像华硕自家的Teamd结构 有的是像技嘉之前常用的并联结构 因为不想去画电路板来测测试 所以 选择Matl
  • 设计模式——(原型设计模式)

    1 什么是原型设计模式 原型模式是一个创建型的模式 原型二字表明了改模式应该有一个样板实例 用户从这个样板对象中复制一个内部属性一致的对象 这个过程也就是我们称的 克隆 被复制的实例就是我们所称的 原型 这个原型是可定制的 原型模式多用于创
  • QT C++ 获取计算机软件、硬件信息cpu、内存、显卡、操作系统等信息

    在使用QT 和 C 编程过程中 我们来讲讲怎样获取计算机软件和硬件信息 包括计算机名称 cpu 显卡 内存 操作系统 几个屏幕以及每个屏幕的分辨率 硬盘信息 IP MAC地址 公网IP 以及是否能够联网等信息 头文件包含 include
  • fins协议握手信号服务器响应,欧姆龙FinsTCP与FinsUDP协议解析 —— 利用Wireshark对报文逐字节进行解析详细解析附含报文模拟器等...

    前言 Fins欧姆龙这个协议网上极少有相关的模拟器 Tcp的这一块倒是有但是Udp的基本都是不可用 1 Fins协议结构也很简单 协议分为两种 一种tcp一种udp 2 Tcp比Udp的报文会多一层tcp的head头部 3 Udp回应报文在
  • 串口服务器之虚拟串口篇

    可将TCP IP连接 Modbus Tcp映射成本地虚拟串口 本地应用 InTouch WinCC 组态王等 通过访问虚拟串口就可以完成远程监控及数据传输功能 VX 18106118736 QQ 806904723 软件使用C 语言开发 更
  • matlab pwm如何设计,原来PWM这么简单!!

    原标题 原来PWM这么简单 基本原理 PWM的全称是 脉冲宽度调制 Pulse width modulation 是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式 所以根据 面积等效法则 可以通过对改变脉冲的时间
  • Java实现简单的区块链

    区块链可以简单抽象成将一个个区块存放在一个链表中 每新增一个块就把它放置在链表尾端 并通过区块之间信息的传递形成独一无二的hash 来确保区块链的数据未被篡改过 区块的实现 区块的基本属性有 当前区块的hash值 前一个区块的hash值 当
  • c语言字母意义,%C是什么意思? c语言中?和:是什么意思

    导航 网站首页 gt C是什么意思 c语言中 和 是什么意思 C是什么意思 c语言中 和 是什么意思 相关问题 匿名网友 c单个字符输出的意思 s是输出字符串 d是输出整型 f是输出整型 这是在scanf printf这样的函数中 将参数类
  • mbed TLS 概述

    系统概要 mbedtls 也许是最小巧的ssl代码库 高效 便于移植和集成 支持常见的安全算法 如 AES DES RSA ECC SHA256 MD5 BASE64等等 除此之外还支持公钥证书体系 它提供了具有直观的 API 和可读源代码
  • 解决g2o无法编译出g2o_viewer的问题

    如果你的ubuntu系统版本较高 例如Ubuntu20 04 可能在利用原始的g2o进行编译时会提示找不到 Could NOT find QGLVIEWER missing QGLVIEWER LIBRARY 解决方法1 安装必要的库 su
  • can't locate node [xxxx] in package [yyyy]

    在运行范例的launch文件时 提示 ERROR cannot launch node of type chapter2 tutorials example2 a can t locate node example2 a in packag
  • 一、为什么从IDEA打开的JavaFx scene builder,imageView没有响应呢?

    问题描述 不知道大家有没有出现和我一样的问题 就是当用idea打开JavaFx scene builder时呢 imageView是无法正常使用的 解决方法 在JavaFx scene builder中新建一个页面 完成界面设置后保存即可
  • 部分交换主元的高斯消去法

    伪代码 pseudocode 程序 function Gauss a b tol if nargin 2 tol 1e 4 end n size a 1 dimention s zeros n 1 initialize save maxim
  • NBA球员能力雷达图matplotlib,pandas

    name BaseData 球员 score BaseData 得分 assist BaseData 助攻 rebound BaseData 篮板 steal BaseData 抢断 block BaseData 盖帽 num BaseDa
  • 【registry】registry 0.9 源码 在 windows下运行

    1 概述 我在本地mac环境运行了registry源码 然后想在winodws也正常运行 于是将mac下能用的源码拷贝到了windows下 结果一堆报错 基本上全是pom问题 此处我用了2天才搞定了下面是pom整理好的拍照 慎重呀 不要轻易
  • 【图像处理】基于收缩系数的粒子群优化和引力搜索算法的多级图像阈值研究【CPSOGSA】(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文献 1 概述 文献来源 图像分割 IS 是图像处理和计
  • 前端学习——HTML5

    新增语义化标签 新增布局标签
  • C++之对象包含与成员函数不兼容的类型限定符---补充(5)《Effective C++》

    C 值对象那个包含与成员函数不兼容的类型限定符 在上篇博客中 运行代码时候 由于没有对show函数添加const 结果突然报了一个错误 对象包含与成员函数不兼容的类型限定符 所以本篇博客进行一个快速补充 在解释这个问题之前 我们先来看看如下