所以我有
set<MyClass> mySet;
在MyClass中我有一个静态int来计算发生的比较次数。我正试图从中获取这些信息,但我无法弄清楚如何。
这是我尝试过的:
set<MyClass>::iterator it = mySet.begin();
int count = it->getCompareCount();
和
int count = mySet.begin()->getCompareCount();
这些都不起作用(是的,我知道它们本质上是完全相同的)但我可以从像std :: list或std :: vector
这样的索引中获取信息示例:
vector<MyClass> myVector;
for (int i = 0; i < 10; i ++)
{
myVector.push_back(MyClass(i,"Some Name", i*2);
}
int count = myVector.at(2).getCompareCount(); //which by default is going to be 0 as no compares have taken place
任何人都可以帮助我吗? netbeans说“错误:传递'const MyClass'作为'int MyClass :: getCompareCount()的'this'参数',当我按照上面说过我做的话时,丢弃限定符[-fpermissive]”。
的 EDITS 的
getCompareCount()声明:
int MyClass::getCompareCount()
{
return compareCount;
}
答案 0 :(得分:0)
std :: set中的元素在插入集合后不可变。当您取消引用迭代器(在it-&gt;中)时,它会返回您放入集合中的对象的const引用。另一方面,getCompareCount()的定义是非const实例函数,这意味着它只能在类的非const实例上调用。定义函数,因为以下内容可以解决您的问题。
int MyClass::getCompareCount() const
{
return compareCount;
}
顺便说一下,由于compareCount是一个静态int,你可能也希望将该函数定义为static,这样你就可以使用该类调用它,而不必让一个实例来调用它。
static int MyClass::getCompareCount()
{
return compareCount;
}
//To Call it
MyClass::getCompareCount()