2015-12-02 118 views
1
protected: 
DWORD    m_dwMountTime; 

public: 
    DWORD GetLastHorseTime() const { 
     return m_dwHorseTime; 
    } 


    DWORD CHARACTER::GetMyHorseVnum() const { 
     int delta = 0; 
     m_dwMountTime = get_dword_time(); 

     return c_aHorseStat[GetHorseLevel()].iNPCRace + delta; 
    } 

好的,有我的代碼。成員分配在只讀對象中

當我嘗試編譯後,我得到一個錯誤:

char_horse.cpp: In member function 'virtual DWORD CHARACTER::GetMyHorseVnum() const': 
    char_horse.cpp:210:16: error: assignment of member 'CHARACTER::m_dwHorseTime' in read-only object 

    m_dwHorseTime = get_dword_time(); 

問題出在哪裏? :)

回答

1

標記爲const的成員函數不能更改類的狀態。在GetMyHorseVnum()你有

m_dwMountTime = get_dword_time(); 

其中改變類的狀態。你要麼需要獲得功能擺脫const改性劑或使m_dwMountTimemutable

1

你宣佈你的GetMyHorseVnum()方法const,所以它不能改變(分配)類成員。

0

您不能在一個const成員函數中更改成員變量,該承諾不會更改該類的狀態。

你可能想使m_dwMountTimemutable,使之可修改:

mutable DWORD m_dwMountTime; 

可變 - 適用於非參考 非const類型的非靜態類成員和指定成員不影響該類的外部可見狀態(如經常用於互斥體,備忘錄 緩存,延遲評估和訪問工具)的 。 const類的可變成員 是可修改的。 (注:C++語言的語法 對待可變的存儲類說明符,但它不會影響 存儲類。)

+0

讓我們嘗試...... – user5546877