0
這是我比較類:Priority Queue沒有名爲top()的成員?
template <class T>
class EdgeComparator{
public:
bool operator()(std::pair<Edge<T>, int>& lhs, std::pair<Edge<T>, int>& rhs) const{
return lhs.second <= rhs.second;
}
};
這裏是我的優先級隊列初始化:
//Initialize the priority queue
std::priority_queue<
std::pair<Edge<T>,int>,
std::vector<std::pair<Edge<T>,int>,
EdgeComparator<T>>
> pQueue;
這裏就是發生錯誤 - 對預編譯器奇怪的錯誤信息流後:
std::pair<Edge<T>, int> topEdge = pQueue.top();
./Prim.cpp:60:54: error: ‘class std::priority_queue<std::pair<Edge<int>, int>, std::vector<std::pair<Edge<int>, int>, EdgeComparator<int> >, std::less<std::pair<Edge<int>, int> > >’ has no member named ‘top’
std::pair<Edge<T>, int> topEdge = pQueue.top();
ATTEMPT 1(對Comparator params增加了const):
template <class T>
class EdgeComparator{
public:
bool operator()(const std::pair<Edge<T>, int>& lhs, const std::pair<Edge<T>, int>& rhs) const{
return lhs.second <= rhs.second;
}
};
嘗試'const std :: pair,int> topEdge = pQueue.top();' –
smac89
您收到的第一條錯誤消息是正確的。隨後的錯誤消息可能是無稽之談,這取決於編譯器通過什麼來取代先前的消息。任何出現在怪異錯誤消息之後的東西都不應該被認真對待。 –
如果'Edge'不是可複製構造的(或者它的移動構造函數不是'noexcept'),那麼'vector'可能無法實例化,然後可能無法定義'priority_queue :: reference',然後'top'可能同樣失敗。正如Pete所說,看到第一個錯誤。 – Potatoswatter