2011-02-23 74 views
6

我想实现一个优先级队列Node*,其中Node是我自己定义的一个类。我意识到拥有一个优先级指针队列意味着它会根据地址进行排序,而不是Node的价值,所以我通过一些讨论论坛搜索了一个解决方案,可以让我指定如何对优先级队列中的节点对象进行排序;大多数人都同意你需要编写一个包含一个函数的结构,该函数将参数作为参数2节点对象并返回所需的比较结果。以下是我的Node类(缩写)和I写信给比较2个节点对象,这是在相同的头文件中的结构:节点指针的C++ STL优先级队列

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:错误:多种类型在一个声明中 化妆:* [爱仕达.o]错误1

astar.h的第28行对应于Astar类的末尾(};)。

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

回答

1

之前Astar没有终止;

+0

在编程中得到的越远,它总是最简单的事情,让你起来...感谢捕捉! – Melissa 2011-02-23 00:37:11