1
我以爲我有這個想通,但我想我錯了。我的印象是'< ...>'中的第一個元素是要存儲在隊列中的類型,第二個元素是容器類型(選項是'vector'或'dequeue'),第三個元素是重載'()'運算符進行比較的類。基於此,我認爲下面的代碼應該編譯,但它不會:(STL優先級隊列非類型編譯錯誤
std::priority_queue<uint32_t*, std::vector<uint32_t*>, edgeComparator> q();
uint32_t* nodeEdge = new uint32_t[2];
nodeEdge[0] = startN;
nodeEdge[1] = 0;
q.push(nodeEdge);
「edgeComparator」的定義如下:
class edgeComparator
{
public:
bool operator() (const uint32_t*& lhs, const uint32_t*& rhs) const
{
return (lhs[1]>rhs[1]);
}
};
這是我得到的錯誤:
./Graph.cpp: In member function `void Graph::findShortestPath()':
./Graph.cpp:148: error: request for member `push' in `q', which is of non-class type `std::priority_queue<uint32_t*, std::vector<uint32_t*, std::allocator<uint32_t*> >, edgeComparator>()()'
更糟糕的是,我想 'q.empty()'
./Graph.cpp:150: error: request for member `empty' in `q', which is of non-class type `std::priority_queue<uint32_t*, std::vector<uint32_t*, std::allocator<uint32_t*> >, edgeComparator>()()'
時也會出現此錯誤
謝謝你的迴應!如果這是一個愚蠢的問題,我很抱歉,但我認爲'SomeClass sc();'會不帶任何參數地調用'SomeClass'的構造函數,這不是很平滑嗎?我使用了類似的符號和提供的參數來初始化事物。 – Daeden
您確實使用該語法爲構造函數指定_one或more_參數。但是,當使用_zero_參數時,您不能使用括號。 –
謝謝!這似乎很不一致,但我確信我永遠不會忘記這一點。我只是將它添加到我不喜歡的關於C++ lol的東西列表中。 – Daeden