2011-02-23 70 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