如果在以下功能發現它們都具有for循環,搜索一個整數位置相同。 Pop()編譯,但我得到一個錯誤的top()必須處理const修飾符。堆類繼承自eecs281heap,它存儲一個函子Comp Comp,其中Comp是類型名。指導員告訴我們訪問這個仿函數的唯一途徑就是通過這個 - >(),所以我只是看着一些蒞臨指導。由於const函數和引用
錯誤:通過「常量」大「本次」的說法「布爾較大::運算符()(INT,INT)」丟棄預選賽
這發生在運行主INT以下後。通過測試,我已經知道構造函數可以正常工作。
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);
}
P.S.更大的是
struct greater{
bool operator()(int x,int y){
return x>y;
}
}
難道是'比較'不是'const'嗎? – juanchopanza
我認爲是這樣,但我不允許改變任何類的彙編,所以當我通過更大的仿函數進行比較時,我不知道如何訪問它與頂部() –
它不會使很有道理。你是說'this-> compare'是一個'更大的'實例嗎?如果是這樣,你的代碼被破壞,因爲它假定'TYPE'是'int'。但是您可以即時創建一個本地'更大'的實例,它允許您調用非const方法。 – juanchopanza