今天在写C++代码的时候遇到一个错误,涉及到了常量的this指针的问题。

简化后的代码如下:

#include <iostream>
#include <string>
using namespace std;class A
{
private:string str;string getStr();
public:void print() const;
};string A::getStr()
{return str;
}
void A::print() const
{cout << getStr() << endl;//error here
}int main()
{A a;return 0;
}

这段代码在注释处会报编译错误如下:

error C2662: 'std::string A::getStr(void)' : cannot convert 'this' pointer from 'const A' to 'A &'

报错提示无法将this指针由“const A”类型转为“A &”类型。

几番查找下得知问题在于代码中的print()函数被声明了为const的,C++在调用类成员函数时会隐式的传递this指针,而将函数声明为const即相当于this指针被声明为const的,如下:

void print() const;

这个声明相当于:

void print(const A * this);

而这个被声明为const的this指针在print函数中调用getStr()时又会被传入,这里问题就出现了,getStr()函数并没有被声明为const的,那么这里面进行参数传递的时候就会发生类型不匹配的问题,也就是这里报的错误。

这里要清楚就是this指针的隐式传递,否则看到print()函数和getStr()函数都没有参数传递却报了这个错误就会感到莫名其妙,这也是我纠结了半天的问题。

解决的方法也很简单,将getStr()函数也声明为const的就可以了。

string getStr() const;

转载于:https://www.cnblogs.com/caiminfeng/p/4761433.html

C++中的error C2662,const的this指针问题相关推荐

  1. 【c++常见错误01】error C2662: ‘const xxx‘: cannot convert ‘this‘ pointer from ‘xxx‘ to ‘xxx‘

    原因 造成这个错误的一般原因是常量对象尝试调用该对象里的非常量函数,例如class Bala里有一个普通的成员函数func(),在某处声明了Bala类常量对象bala,const Bala bala, ...

  2. 前端开发中的Error以及异常捕获

    本文首发于公众号:符合预期的CoyPan 写在前面 在前端项目中,由于JavaScript本身是一个弱类型语言,加上浏览器环境的复杂性,网络问题等等,很容易发生错误.做好网页错误监控,不断优化代码,提 ...

  3. error: passing ‘const xxx’ as ‘this’ argument discards qualifiers c++primer 5th文本查询程序一个错误请各位指教(已解决)

    文件main.cc 文件main.cc #include <string> #include <iostream> #include <memory> #inclu ...

  4. Go 中的 error 居然可以这样封装

    本文由周浩翻译自:https://medium.com/spectro-cloud/decorating-go-error-d1db60bb9249,ironbox和Tang Ruilin参与校对. ...

  5. C++ STL编译报错:error: error passing 'const' as 'this' argument

    用C++ STL(标准模板库)编写仿函数的时候,编译报错: error: passing 'const FindNameOrAddress' as 'this' argument of 'bool F ...

  6. ZooKeeper配置中出现Error contacting service. It is probably not running

    问题描述 ZooKeeper配置中出现Error contacting service. It is probably not running,实际上已经装了ZooKeeper,并进行了相关文件的配置 ...

  7. 试用版office 2010中提示Error opening SocialConnectorRes.dll求解!!

    试用版office 2010中提示Error opening C:\Program Files\Microsoft Office\Office14\2052\SocialConnectorRes.dl ...

  8. SQL Server 中关于 @@error 的一个小误区

    原文:SQL Server 中关于 @@error 的一个小误区 在SQL Server中,我常常会看到有些前辈这样写: if(@@error<>0)ROLLBACK TRANSACTIO ...

  9. C++中的“error:LNK2005 已经在*.obj中定义”异常

     C++中的"error:LNK2005 已经在*.obj中定义"异常问题 异常现象如下: C++中的"error:LNK2005 已经在*.obj中定义" ...

  10. Windows 中自定义Error Codes

    Windows 中自定义Error Codes的格式: Bits: 31-30 29 28 27-16 15-0 Contents Severity Microsoft/ customer Reser ...

最新文章

  1. vue 百度统计_百度暑期实习前端开发面经
  2. 9.3 域名解析与网页爬虫
  3. php 上传加水印,php 图片上传加水印(自动增加水印)
  4. C++设计模式-代理模式
  5. 数据结构与算法 —— 链表linked list(05)
  6. IT公司对员工电脑监控一般使用什么软件?
  7. 服务器2012怎么安装无线网卡驱动,如何安装usb无线网卡驱动,教您如何安装电脑usb驱动...
  8. p2p借贷项目面试题
  9. Arcgis 10.2坡度分析
  10. 【物联网毕设基础】NBIOT 窄带物联网
  11. Centos用mail命令登录163邮箱发邮件
  12. java使用mybatis一次性插入多条数据
  13. Vue中文字只显示三行,超过部分收起的实现方法
  14. 局域网访问提示无法访问检查拼写_windows无法访问 请检查名称的拼写。否则,可能网络有问题...
  15. OMI数据-官网资料的记录
  16. Gateway集成Nacos和Sentinel
  17. 郑莉c 语言程序设计答案,C语言程序设计(郑莉)课后习题答案
  18. 已创建了一个包含学生学号、身高、性别的学生身高信息表并输出到屏幕,学生信息从records.txt文件读取。 编写一个函数 void reverse(Seqlist *lp); 功能是对已建立的学生身
  19. 学生类和教师类的设计
  20. 一分钟解决上网速度慢的问题

热门文章

  1. 抄答案就是了,两套详细的设计方案,解决头疼的支付掉单问题
  2. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_08-新增页面-前端-Api调用...
  3. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第5节 使用骨架创建maven的java工程_13使用骨架创建maven的web工程...
  4. 编程之美 1.4买书问题常数时间空间解法
  5. 数据结构代码学习笔记(持续更新中)
  6. IOS学习之斯坦福大学IOS开发课程笔记(第六课)
  7. EF框架step by step(9)—Code First Fluent API
  8. localStorage的跨与实现方案
  9. Enterprise Solution(2.2.20130525) 解决方案配置与源代码下载
  10. 解决docker-compose: command not found