我正在尝试实现 Node*
的优先级队列,其中 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: 错误:一个声明中有多种类型
制作:* [astar.o] 错误 1
其中 astar.h 的第 28 行对应于 Astar 类的结尾 (
};
)。由于这是大多数论坛上提供的解决方案,我不明白这里发生了什么。有没有人对我有任何见解?
最佳答案
Astar 之前的类缺少终止;
关于priority-queue - 节点指针的C++ STL优先级队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5085650/