示例程序:

#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 错误处理的更多相关文章

  1. 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:: ...

  2. 关于c++ error : passing " "as" " discards qualifiers

    http://www.cppblog.com/cppblogs/archive/2012/09/06/189749.html 今天写了一段小代码,本以为正确,但运行后,就somehow ”discar ...

  3. invalid initialization of non-const reference of type与discards qualifiers

    参数传递          函数参数的传递是初始化语义:用调用者的实参去初始化函数的形参,如果参数是对象,需要调用该类的拷贝构造函数,如果没有显式定义的拷贝构造函数,则执行默认的按成员拷贝      ...

  4. 实参时丢弃了类型 discards qualifiers discards qualifiers问题

    百思不得其解,于是百度,google吧.. 发现Stackoverflow上也有人有相同的问题 下面是他的问题: For my compsci class, I am implementing a S ...

  5. C++ 编译报错discards qualifiers [-fpermissive]

    声明了一个类 class Card { public: Card(const string&); int m_value; char m_suit; private: const static ...

  6. c++ 异常 discards qualifiers 丢弃

    src/feedbackservice.cpp:76: error: passing `const ps::spider::urlreceiver::entry::ConfigManager' as ...

  7. jni编译non-numeric second argument to `wordlist' function错误

    在jni编译过程中,遇到non-numeric second argument to `wordlist' function错误,个人遇到这个错误的原因,是因为从windows中拷贝了Android. ...

  8. PHP:Invalid argument supplied for foreach()错误原因及解决办法

    在php中使用foreach循环遍历时报Invalid argument supplied for foreach()错误,是因为循环的数据不是一个有效的数组. 因此我们只要在foreach之前判断一 ...

  9. 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. ...

随机推荐

  1. hdu 4023 2011上海赛区网络赛C 贪心+模拟

    以为是贪心,结果不是,2333 贪心最后对自己绝对有利的情况 点我 #include<cstdio> #include<iostream> #include<algori ...

  2. [JavaCore] 不错的Java基础学习资料-持续更新

    容易弄混的JAVA基础知识: http://www.iteye.com/topic/943647 [总结]String in Java: http://www.iteye.com/topic/5221 ...

  3. 使用SOUI开发的界面集锦

    仿QQ管家界面

  4. C++模板【转】

    1. 模板的概念. 我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同.正确的调用重载函数.例如,为求两个数的最大值,我们定义MAX()函数 ...

  5. 接口JSon字符串格式

  6. Android之Adapter用法总结(转)

    Android之Adapter用法总结 1.概念 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带.在常见的View(List View,Grid Vie ...

  7. python最简单的http服务器

    人生苦短,我用python 今天有个需求就是简单的把自己的图片通过web共享,自然就想起了使用服务器了,在python下使用一个简单的服务器是非常方便的,用到标准库里面的SimpleHTTPServe ...

  8. ontouchstart

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta cont ...

  9. filter应用案例一:分IP统计访问次数

    统计工作需要在所有资源之前都执行,那么就可以放到Filter中了.用Map<String,Integer>装载统计的数据.Map创建时间(使用ServletContextListener, ...

  10. LR检查点的if (status == LR_FAIL)写法

    C语言例子:登录失败返回一个信息 int status = web_url("Login", "URL=https://secure.computing.com//log ...