【发布时间】:2011-02-23 00:14:15
【问题描述】:
我正在尝试实现Node* 的优先级队列,其中 Node 是我自己定义的一个类。我意识到拥有指针的优先级队列意味着它会根据地址进行排序,而不是节点持有的值,所以我搜索了很多讨论论坛来找到一个解决方案,让我可以指定如何对优先级队列中的节点对象进行排序;大多数人同意您需要编写一个结构,其中包含一个函数,该函数将 2 个 Node 对象作为参数并返回所需的比较。以下是我的 Node 类(缩写)和我编写的用于比较 2 个 Node 对象的结构,它们在同一个头文件中:
class Node {
public:
...
int fValue() const { cerr << fValue() << endl; return c + h; };
...
private:
...
int c;
int h;
...
};
struct CompareNode : public std::binary_function<Node*, Node*, bool>
{
bool operator()(const Node* lhs, const Node* rhs) const
{
return lhs->fValue() < rhs->fValue();
}
}
我将优先级队列构造为不同头文件中另一个类的成员,该头文件包含包含上述定义的头文件。该类简写如下:
class Astar {
public:
...
private:
...
priority_queue<Node*, vector<Node*>, CompareNode> frontier;
};
当我尝试编译时,我得到了这个错误:
astar.h:28:错误:一个声明中有多种类型 make: * [astar.o] 错误 1
astar.h 的第 28 行对应于 Astar 类的结尾 (};)。
由于这是大多数论坛上提供的解决方案,我不明白这里发生了什么。有人对我有任何见解吗?
【问题讨论】:
标签: priority-queue