声明了一个类

class Card

{

public:

Card(const string&);

int m_value;

char m_suit;

private:

const static map<char, int> m_map;

};

const map<char, int> Card::m_map=

{

{'2', 2},

{'3', 3},

{'4', 4},

{'5', 5},

{'6', 6},

{'7', 7},

{'8', 8},

{'9', 9},

{'T', 10},

{'J', 11},

{'Q', 12},

{'K', 13},

{'A', 14}

};

Card::Card( const string& p_cardVal)

{

    //m_value = Card::m_map[(p_cardVal[0]];

m_value = Card::m_map.at(p_cardVal[0]);

m_suit = p_cardVal[1];

}

红线部分会报错,显示error: passing ‘const std::map<char, int>’ as ‘this’ argument discards qualifiers [-fpermissive]

查看CPP reference 可以知道,map的[],都是非const 的,而m_map是const的对象,于是会报错。(见http://blog.csdn.net/xidwong/article/details/52754514)

T& operator[]( const Key& key );(1)
T& operator[]( Key&& key ); (2)

在map的成员函数中,at成员函数

T& at( const Key& key );(1)
const T& at( const Key& key ) const;(2)
因此使用下面的at便可以解决这个编译错误。

这个fpermissive 编译选项 千万不可以强制加上, 否则即使编译通过,运行结果可能和预期的有很大的区别。甚至会引起crash!!!!!!

C++ 编译报错discards qualifiers [-fpermissive]相关推荐

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

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

  2. go build 编译报错 missing go.sum entry for module providing package

    go build 编译报错 missing go.sum entry for module providing package 解决方法 // 移除未使用的依赖 go mod tidy 再次编译,就可 ...

  3. 编译报错field has incomplete type

    linux下编译C++代码报错,报错信息"field has incomplete type".这种问题一般都是在头文件对类或者结构体进行了前向声明,后面使用了该类定义了对象,导致 ...

  4. Eclipse中更改JDK版本,解决ant编译报错的问题

    要改一个JDK版本 主要是为了解决ant编译报错,JDK版本不一致的问题. 1. Windows--Preferences--Java--Compiler(配置的为1.8)--Installed JR ...

  5. idea java编译报错_intellij-idea,java_idea 编译报错,intellij-idea,java - phpStudy

    idea 编译报错 简单的 helloworld 竟然坑了我一天啦 /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/bi ...

  6. 新的ipad,用xcode编译报错 dyld_shared_cache_extract_dylibs

    删掉  ~/Library/Developer/Xcode/iOS DeviceSupport/ 这个目录下的特定文件夹就行啦. 其实是因为  device is busy  生成文件夹过程中拔掉了设 ...

  7. cordova编译报错:Execution failed for task ':processDebugResources'

    cordova编译报错:Execution failed for task ':processDebugResources' 引发这个错误的最扩祸首就是一个中文命名的文件,不知道什么时候加入的,我写了 ...

  8. Android 编译报错:Could not get resource

    编译报错: Could not resolve all dependencies for configuration ':app:debugRuntimeClasspath'. Could not d ...

  9. AS升级3.1 编译报错:The SourceSet 'instrumentTest' is not recognized by the Android Gradle Plugin.

    AndroidStudio升级到3.1后编译报错:The SourceSet 'instrumentTest' is not recognized by the Android Gradle Plug ...

  10. AS升级编译报错:The SourceSet 'instrumentTest' is not recognized by the Android Gradle Plugin....

    AS升级3.2.0 编译报错:The SourceSet 'instrumentTest' is not recognized by the Android Gradle Plugin. 解决方法:将 ...

最新文章

  1. C++中的final关键字
  2. 2022-2027年中国PPR管材行业发展态势及市场需求分析报告
  3. jeesite快速开发平台(三)----项目文件结构与配置文件详解
  4. Python多线程详解
  5. Unity3D对手机屏幕触摸的控制脚本
  6. 转-Kafka【第一篇】Kafka集群搭建
  7. 前端学习(3068):vue+element今日头条管理-日期处理
  8. 重装Nodejs后,webstorm代码报错问题
  9. LeetCode 1598. 文件夹操作日志搜集器
  10. 异常处理、集合框架和反射
  11. html编辑器后怎么使用,html在线编辑器怎么用
  12. nginx的web基础
  13. 读取usb接口数据_笔记本接口不够?无须担心!小米分线器开箱初体验
  14. 数据算法_数据结构和常用算法
  15. 微软雅黑字体的bug,可能不是我第一个发现的
  16. 人月神话(四)削足适履、提纲挈领、未雨绸缪
  17. Pycharm常用快捷键大全【快查字典版】
  18. mysql partition 语法,MySQL与瀚高数据库的范围分区的语法及实例(APP)
  19. 硬件产品经理 硬件职业理解 第二弹
  20. SQL server 数据库 修改学生数据表

热门文章

  1. 软件测试基础知识【纯知识分享】
  2. Form 电子表格(JTF GRID)
  3. 关闭appleid双重认证_如何查看并移除登陆过Apple ID的设备
  4. 偶像生于1964:马云、张朝阳、求伯君的激荡人生
  5. OVNOVS代码下载、编译安装以及运行步骤
  6. html摄氏度转换华氏度,摄氏和华氏转换器-JavaScript
  7. 基于Node.js+Electron+CPP(DLL)的Windows桌面应用程序(自助终端)开发简介
  8. 计算机与现代社会英语作文,高一英语作文,科技以下是题目:众所周知,科技在现代社会和生活中扮演着越来越重要的角色,但科技同时也是一把双刃剑,在它璀璨...
  9. VBA 字典使用小结:关键字循环
  10. android锁屏密码忘了,安卓手机锁屏密码忘记了怎么办