我有一个包含类的头文件。在那个课程中,我有一个像这样的函数:
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变量出来?
提前致谢
答案 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;