如果您在以下函数中注意到它们都有相同的用于搜索整数位置的 for 循环。Pop() 编译但我得到一个错误,因为 top() 与 const 限定符有关。heap 类继承自 eecs281heap,它存储了一个函子 Comp 比较,其中 Comp 是类型名。讲师告诉我们访问函子的唯一方法是通过 this->() 所以我只是在这里寻找一些指导。谢谢
错误:将 'const large' 作为 'bool large::operator()(int, int)' 的 'this' 参数传递会丢弃限定符
在 int main 中运行以下命令后会发生这种情况。通过测试我已经知道构造函数可以正常工作。
vector <int> data={10,2,13};
poorman_heap<int,larger> y(data.begin(),data.end());
template<typename TYPE, typename COMP>
void poorman_heap<TYPE, COMP>::pop() {
int location=0;
for(int i=1;i<data.size();i++){
if(this->compare(data.at(i),data.at(location))){
location=i;
}
}
data.erase(data.begin()+location);
return;
}
template<typename TYPE, typename COMP>
const TYPE& poorman_heap<TYPE, COMP>::top() const {
int location=0;
for(int i=1;i<data.size();i++){
if(this->compare(data.at(i),data.at(location))){
location=i;
}
}
return data.at(location);
}
PS 更大的是
struct greater{
bool operator()(int x,int y){
return x>y;
}
}