我以为我已经弄清楚了,但我想我错了。我的印象是“<...>”中的第一个元素是要存储在队列中的类型,第二个元素是容器类型(选择是“vector ”或“出队”),第三个元素是要存储在队列中的类型。是重载“()”运算符进行比较的类。基于此,我认为以下代码应该可以编译,但不能编译:(
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> ()()'
最佳答案
你有:
std::priority_queue<uint32_t*, std::vector<uint32_t*>, edgeComparator> q();
但是,您应该使用:
std::priority_queue<uint32_t*, std::vector<uint32_t*>, edgeComparator> q;
第一个版本声明了一个名为 q
的函数 ,不带任何参数,并返回 std::priority_queue<...>
类型的值.
第二个版本声明了一个名为 q
的变量 ,类型为std::priority_queue<...>
,这是默认初始化的。
关于c++ - STL优先级队列非类类型编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13437533/