Я пытаюсь реализовать приоритетную очередь 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 (};
).
С этого момента это решение, представленное на большинстве форумов, я не понимаю, что здесь происходит. У кого-нибудь есть какие-нибудь сведения для меня?