我正在開發這個程序,用堆實現來運行Dijkstra的算法,並且我希望它能夠儘可能多功能,所以我使用函數指針以便避免代碼重複。這是它彈出的錯誤。我使用STL make_heap傳遞一個函數指針作爲stl中的比較器make_heap C++
"Type must use '.*' or '->*' to call pointer-to-member function in '__comp (...)', e.g. '(... ->* __comp) (...)' "heap.h C/C++ Problem
這裏是Dijkstra算法:
void Graph::dijkstraAlg(Vertex* ini, Vertex* fin, void(Graph::*weight_filler)(void), bool(Graph::*pq_order)(const Vertex* &, const Vertex* &)){
for(unsigned int i = 0; i < vertexs.size(); i++) {
vertexs[i]->path = NULL;
vertexs[i]->holder = MAX_INT_VALUE;
vertexs[i]->processing=false;
}
(this->*weight_filler)();
Vertex* v=ini;
v->holder = 0;
v->processing = true;
vector<Vertex*> pq;
pq.push_back(v);
make_heap(pq.begin(),pq.end(),pq_order);
while(!pq.empty()){
v=pq.front();
pop_heap(pq.begin(),pq.end());
pq.pop_back();
for(unsigned int u=0; u < v->adj.size(); u++){
Vertex* w = v->adj[u]->dest;
if((v->holder+v->adj[u]->weight) < w->holder){
w->holder=v->holder + v->adj[u]->weight;
w->path=v;
if(!w->processing){
w->processing=true;
pq.push_back(w);
}
}
make_heap(pq.begin(),pq.end(),pq_order);
}
}
return;}
的錯誤是在make_heap,我無法弄清楚,任何幫助表示讚賞。
這裏是我傳遞給make_heap功能:
bool Graph::regular_PqOrder(const Vertex* &v, const Vertex* &u){
return v->holder > u->holder;}
這是我如何調用該算法中:
dijkstraAlg(i,f,&Graph::price_WeightFiller,&Graph::regular_PqOrder);
只是如果你需要更多的信息告訴我,我編輯。 謝謝朋友的
這是怎麼被稱爲?你應該追加和功能被傳遞給你的算法 – Sarang
已經編輯。謝謝你的時間 –