修改const函数问题中的私有int

时间:2011-12-06 00:55:39

标签: c++ arrays const

我的代码如下,我在numberCollisions + = collisionNum时遇到错误; 错误状态'numberCollisions'无法修改,因为它是通过const对象使用的。这个错误刚刚弹出,因为它是一个const函数吗?谢谢你的帮助。

int HashTable_qp::findPos( const string & x ) const
{
    /* 1*/      int collisionNum = 0;
    /* 2*/      int currentPos = myhash( x, array.size( ) );

    /* 3*/      while( array[ currentPos ].info != EMPTY &&
        array[ currentPos ].element != x )
    {
        /* 4*/          currentPos += 2 * ++collisionNum - 1;  // Compute ith probe
        /* 5*/          if( currentPos >= array.size( ) )
            /* 6*/              currentPos -= array.size( );
    }
    numberCollisions += collisionNum;
    /* 7*/      return currentPos;
}

3 个答案:

答案 0 :(得分:6)

是 - 对于这样的情况,您修改的内部簿记号不会影响对象的逻辑状态,您可能需要考虑使用mutable限定符来定义变量:

class HashTable_op { 
    mutable int numberCollisions;

};

答案 1 :(得分:4)

是的,正是因为这个原因。常量方法意味着您不会更改实例,但是您会这样做,因为您的findPos 应该更改实例。所以只需删除const然后继续。

答案 2 :(得分:1)

是的,这就是错误的原因。要在这种情况下使编译器闭嘴,您可以标记成员mutable。但是,我不确定你在这里做了什么,如果让编译器关闭将是正确的响应。

使用mutable的的经典示例场景将执行昂贵但不变异的操作(因此相应的函数为const),但想要缓存结果,如果再次立即调用该函数,则不必再次执行此操作。您需要某处存储结果,但函数为const;因此,mutable来救援。