Очередь приоритетов C ++ STL указателей узлов

Я пытаюсь реализовать приоритетную очередь Node * , где Node - это класс Я определил себя. Я понял, что наличие очереди указателей с приоритетом будет означать, что она будет сортироваться на основе адреса, а не значения, которое хранится в узле, и поэтому я просмотрел довольно много дискуссионных форумов, чтобы найти решение, которое позволило бы мне указать, как для сортировки объектов Node в очереди приоритета; большинство согласны с тем, что вам нужно написать структуру, содержащую функцию, которая принимает в качестве аргументов 2 объекта Node и возвращает желаемое сравнение. Ниже приведен мой класс Node (сокращенно) и структура, которую я написал для сравнения двух объектов 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: error: make: * [astar.o] Ошибка 1

, где строка 28 файла astar.h соответствует концу класса Astar (}; ).

С этого момента это решение, представленное на большинстве форумов, я не понимаю, что здесь происходит. У кого-нибудь есть какие-нибудь сведения для меня?

6
задан Melissa 23 February 2011 в 00:14
поделиться