菜鸟笔记
提升您的技术认知

c 编译报错discards qualifiers [-ag真人官方网

声明了一个类

class card
{
public:
   card(const string&);
   int m_value;
   char m_suit;
private:
    const static map m_map;
};
const map 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’ 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便可以解决这个编译错误。

网站地图