C ++ const迭代器C2662

时间:2010-03-02 02:46:16

标签: c++ iterator const

迭代问题。我认为问题与const正确性有关。我假设B :: getGenerate()应该是const,这个代码可以工作,但是我无法控制B :: getGenerate()。

非常感谢任何帮助。

提前致谢, JBU

代码如下:

int
A::getNumOptions() const
{
   int running_total = 0;

   BList::const_iterator iter = m_options.begin();

   while(iter != m_options.end())
   {
      if(iter->getGenerate()) //this is the line of the error; getGenerate() returns bool; no const in signature
      {
         running_total++;
      }
   }

   return running_total;
}

1>。\ A.cpp(118):错误C2662:'B :: getGenerate()':无法将'this'指针从'const B'转换为'B&'

2 个答案:

答案 0 :(得分:3)

好吧,如果getGenerate是非const的,那么你的迭代器必须是非const的。如果是这种情况,您的getNumOptions也必须是非常数。

如果您无法控制getGenerate,则无法执行任何其他操作。但是,如果该方法可能 const,请将其与实施该方法的人一起提出;告诉他们应该const

答案 1 :(得分:1)

B :: getGenerate()需要像这样声明:

class B
{
   bool getGenerate() const;
};

'const'关键字在这里很重要。这告诉编译器调用getGenerate()不会修改B的任何其他成员。