奇怪的const正确性错误

时间:2011-04-10 02:58:51

标签: c++

我有一个包含类的头文件。在那个课程中,我有一个像这样的函数:

class Definition
{
public:
   int GetID()
   {
    return Id;
   }

//Other methods/variables
private:
   int Id;

}

当我尝试获取该ID时:

for (std::map<Definition, std::vector<bool> >::iterator mapit = DefUseMap.begin(); mapit != DefUseMap.end(); ++mapit, defIndex++)
{
    stream << "Definition " << (*mapit).first.GetID() << " Def Use" << endl << "\t";
}

我收到以下错误

CFG.cc:1145:错误:将'const Definition'作为'int Definition :: GetID()的'this'参数传递,丢弃限定符

是因为我在地图中使用了定义,而且我不允许在该映射定义上调用方法?有没有办法让ID变量出来?

提前致谢

2 个答案:

答案 0 :(得分:9)

声明getID()方法const:

int getId() const
{
    return Id;
}

然后可以通过const引用调用该方法,这是operator<<()传递的内容。

答案 1 :(得分:1)

map<Key, Value>将您的数据存储在std::pair<const Key, Value>内部。这样就很难意外地改变Key并破坏元素的排序。

为了能够为const键调用GetID(),该函数也必须被声明为const:

int GetID() const;