1. 程式人生 > >const+map引起error C2678的解決辦法

const+map引起error C2678的解決辦法

               

  寫了一個小程式,在一個const成員函式中訪問了一個map成員,如下所示:

void CPlayerScore::GetScore(GAMERESULT res, RBScore & rbscore)const {      rbscore = m_scoreTable[res];}

m_scoreTable是一個map成員,結果編譯時報錯。

error C2678: 二進位制“[” : 沒有找到接受“const std::map<_Kty,_Ty>”型別的左運算元的運算子(或沒有可接受的轉換)

解決辦法有兩個:

1、是去掉函式的const屬性,但是這樣就改變設計意義了

2、在宣告m_scoreTable時加上mutable限定符,如下所示

mutable map<GAMERESULT, RBScore> m_scoreTable;

第2個辦法是網友benbear告訴我的,又學到了一招,呵呵

3、不改變原來的宣告

程式碼改為

     map<GAMERESULT, RBScore>:: const_ iterator it=m_score.find(res);

    assert(it !=m_score.end();

     rbscore = it->second;