passing ‘const ’ as ‘this’ argument of ‘’ discards qualifiers 错误处理
示例程序:
#include <iostream>
#include <set>
using namespace std ;
class StudentT
{
public :
int id ; string name ;
public :
StudentT ( int _id , string _name ) : id ( _id ), name ( _name ) { }
int getId () { return id ; }
string getName () { return name ; }
};
inline bool operator < ( StudentT s1 , StudentT s2 ) { return s1 . getId () < s2 . getId (); }
int main ()
{
set < StudentT > st ;
StudentT s1 ( 0 , "Tom" );
StudentT s2 ( 1 , "Tim" );
st . insert ( s1 ); st . insert ( s2 );
set < StudentT > :: iterator itr ;
for ( itr = st . begin (); itr != st . end (); itr ++)
{
cout << itr -> getId () << " " << itr -> getName () << endl ;
}
return 0 ;
}
错误提示:
../main.cpp:35: error: passing 'const StudentT' as 'this' argument of 'int StudentT::getId()' discards qualifiers
../main.cpp:35: error: passing 'const StudentT' as 'this' argument of 'std::string StudentT::getName()' discards qualifiers
原因:
std::set的对象存储const StudentT 。 所以当您尝试调用getId() const对象的编译器检测到一个问题,即你调用一个const对象的非const成员函数这是不允许的,因为非const成员函数不作任何承诺,不修改对象,所以编译器将会使一个安全的假设getId()可能试图修改的对象,但同时,它也注意到,该对象是const,所以任何试图修改const对象应该是一个错误。 因此,编译器会生成错误消息。
解决方法:
解决方法很简单:函数的const:
int getId () const { return id ; }
string getName () const { return name ;}
passing ‘const ’ as ‘this’ argument of ‘’ discards qualifiers 错误处理的更多相关文章
- C++ error: passing 'const std::map<>]' discards qualifiers或pass-by-reference-to-const-map导致的“discards qualifiers”
产生问题的场景: int func(const map<int, string> &aMap) { string value = amap[0]; } 或者 int Test:: ...
- 关于c++ error : passing " "as" " discards qualifiers
http://www.cppblog.com/cppblogs/archive/2012/09/06/189749.html 今天写了一段小代码,本以为正确,但运行后,就somehow ”discar ...
- invalid initialization of non-const reference of type与discards qualifiers
参数传递 函数参数的传递是初始化语义:用调用者的实参去初始化函数的形参,如果参数是对象,需要调用该类的拷贝构造函数,如果没有显式定义的拷贝构造函数,则执行默认的按成员拷贝 ...
- 实参时丢弃了类型 discards qualifiers discards qualifiers问题
百思不得其解,于是百度,google吧.. 发现Stackoverflow上也有人有相同的问题 下面是他的问题: For my compsci class, I am implementing a S ...
- C++ 编译报错discards qualifiers [-fpermissive]
声明了一个类 class Card { public: Card(const string&); int m_value; char m_suit; private: const static ...
- c++ 异常 discards qualifiers 丢弃
src/feedbackservice.cpp:76: error: passing `const ps::spider::urlreceiver::entry::ConfigManager' as ...
- jni编译non-numeric second argument to `wordlist' function错误
在jni编译过程中,遇到non-numeric second argument to `wordlist' function错误,个人遇到这个错误的原因,是因为从windows中拷贝了Android. ...
- PHP:Invalid argument supplied for foreach()错误原因及解决办法
在php中使用foreach循环遍历时报Invalid argument supplied for foreach()错误,是因为循环的数据不是一个有效的数组. 因此我们只要在foreach之前判断一 ...
- CTC安装及其错误解决办法:binding.cpp:92:49: error: cannot convert ‘THCudaTensor*’ to ‘const THFloatTensor*’ for argument ‘1’ to ‘int64_t THFloatTensor_size(const THFloatTensor*, int)’
CTC安装: 1. 在终端执行命令:git clone https://github.com/SeanNaren/warp-c) (效果如下图,大家不用管我前面括号的内容,那是我打开的虚拟环境) 2. ...
随机推荐
- long和int的区别
转自:http://blog.sina.com.cn/s/blog_6f62c9510101svjz.html 突然间就想到了long和int到底什么区别(发现有很多问题都是突然间想到的),然后百度. ...
- Ubuntu下配置samba实现文件夹共享
转自:http://www.cnblogs.com/phinecos/archive/2009/06/06/1497717.html 一. samba的安装: sudo apt-get insall ...
- 在Virtulbox上装Ubuntu
做个程序员,会用Linux,这应该是最基本的要求吧.可惜本人经常用Windows,只是偶尔去服务器上做些操作的时候才接触到linux.so,我要学Linux.刚学所以还是先装个虚拟机吧,等在虚拟机上用 ...
- mysql的启动
1.直接用mysqld手工启动 [root@ora11g bin]# ./mysqld --defaults-file=../my.cnf :: [ERROR] Fatal error: Please ...
- Atom 和 markdown 基本使用
Atom 和 markdown 基本使用 Atom 常用的快捷键 Cmd + Shift + P 打开命令窗口,可以运行各种菜单功能. Cmd + T 快速的多文件切换 Ctrl + G 文件内跳转到 ...
- 【JDK】电脑上安装多个JDK ,修改JAVA_HOME后没有作用
电脑上装了 C:\Program Files\Java\jdk1.6.0_43 C:\Program Files\Java\jdk1.7.0_80 C:\Program Files\ ...
- UVA 12232 Exclusive-OR(并查集+思想)
题意:给你n个数,接着三种操作: I p v :告诉你 Xp = v I p q v :告诉你 Xp ^ Xq = v Q k p1 p2 … pk:问你k个数连续异或的结果 注意前两类操作可能会出现 ...
- POJ 1743 后缀数组
题目链接:http://poj.org/problem?id=1743 题意:给定一个钢琴的音普序列[值的范围是(1~88)],现在要求找到一个子序列满足 1,长度至少为5 2,序列可以转调,即存在两 ...
- storm安装笔记以及提交拓扑任务
Storm -- Distributed and fault-tolerant realtime computation 这是一个分布式的.容错的实时计算系统 把Storm依赖组件的版本贴出来供各位参 ...
- BestCoder#15 A-LOVE(暴力)
Love Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...