Priority queue C++;节点指针的STL优先级队列

Priority queue C++;节点指针的STL优先级队列,priority-queue,Priority Queue,我试图实现一个优先级队列Node*,其中Node是我自己定义的类。我意识到,拥有一个指针优先级队列意味着它将根据地址而不是节点持有的值进行排序,因此我搜索了许多论坛,以找到一个解决方案,允许我指定如何对优先级队列中的节点对象进行排序;大多数人都同意,您需要编写一个结构,其中包含一个函数,该函数将2个节点对象作为参数并返回所需的比较。下面是我的节点类(缩写)和我编写的用于比较同一头文件中的两个节点对象的结构: class Node { public: ... int fValue()

我试图实现一个优先级队列
Node*
,其中Node是我自己定义的类。我意识到,拥有一个指针优先级队列意味着它将根据地址而不是节点持有的值进行排序,因此我搜索了许多论坛,以找到一个解决方案,允许我指定如何对优先级队列中的节点对象进行排序;大多数人都同意,您需要编写一个结构,其中包含一个函数,该函数将2个节点对象作为参数并返回所需的比较。下面是我的节点类(缩写)和我编写的用于比较同一头文件中的两个节点对象的结构:

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();
  }
}
类节点{
公众:
...
int fValue()常量{cerr fValue();
}
}
我将优先级队列构造为不同头文件中另一个类的成员,该头文件包括包含上述定义的头文件。该类缩写如下:

class Astar {

public:

  ...

private:

  ...
  priority_queue<Node*, vector<Node*>, CompareNode> frontier;
};
类Astar{
公众:
...
私人:
...
优先队列边界;
};
当我尝试编译时,出现以下错误:

astar.h:28:错误:一个声明中包含多个类型 make:[astar.o]错误1

其中,astar.h的第28行对应于astar类的结尾(
};


由于这是大多数论坛提供的解决方案,我不明白这里发生了什么。有人对我有什么见解吗?

阿斯塔之前的课程缺少终止

你在编程方面走得越远,总是最简单的事情把你绊倒…谢谢你抓住了这个机会!!!