【问题标题】:assignment of member ' in read-only object只读对象中成员的赋值
【发布时间】:2015-12-03 00:09:13
【问题描述】:
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();

问题出在哪里? :)

【问题讨论】:

    标签: c++


    【解决方案1】:

    标记为const 的成员函数不能更改类的状态。在GetMyHorseVnum() 你有

    m_dwMountTime = get_dword_time();
    

    这会改变类的状态。您要么需要去掉函数上的 const 修饰符,要么制作 m_dwMountTime mutable

    【讨论】:

      【解决方案2】:

      您将GetMyHorseVnum() 方法声明为const,因此它不能更改(分配)类成员。

      【讨论】:

        【解决方案3】:

        您不能更改 const 成员函数中的成员变量,这承诺不会更改类的状态。

        您可能希望将 m_dwMountTime mutable 设为可修改:

        mutable DWORD m_dwMountTime;
        

        mutable - 适用于非引用的非静态类成员 非常量类型并指定该成员不影响 类的外部可见状态(通常用于互斥体、备忘录 缓存、惰性求值和访问检测)。可变成员 的 const 类是可修改的。 (注:C++语言语法 将 mutable 视为存储类说明符,但不影响 存储类。)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-24
          • 1970-01-01
          相关资源
          最近更新 更多