2013-12-17 19 views
0

我試圖讓一個類來定義圖搜索算法的行爲。C++製作一個類似容器的類

類接收到一個通用的容器作爲模板參數和行爲基於容器

template <typename N, typename E, class Container> 
class Frontier { 
    private: 
     Container frontier; 

    public: 
     bool isEmpty() { return this.frontier.empty(); } 

     typename Graph<N, E>::const_iterator pop() { return this.frontier.pop(); } 

     bool push(typename Graph<N, E>::const_iterator it) { return this.frontier.push(it); } 
}; 

上,但是當我嘗試編譯我得到

request for member ‘frontier’ in ‘this’, which is of non-class type 

我知道這是因爲STL做容器是這樣實現的

template<class T, Class C = deque<T> > class std::stack; 

我注意到大寫字母C在Class中所以我三編輯使用類的實現,但我從編譯器「類未定義」。我該如何解決這個問題?

回答

6

您錯過了錯誤信息的結尾,它會告訴您this是一個指針,並詢問您是否打算使用->而不是.。這應該可以解決錯誤。

請注意,classtypename在模板參數列表中是等效的。沒什麼大不了的,但一致性很好。 (請注意,Class不是作爲關鍵字有效。不知道你在哪裏得到了來自...)

template <typename N, typename E, typename Container> 
class Frontier { 
    private: 
     Container frontier; 

    public: 
     bool isEmpty() { return this->frontier.empty(); } 

     typename Graph<N, E>::const_iterator pop() { return this->frontier.pop(); } 

     bool push(typename Graph<N, E>::const_iterator it) { return this->frontier.push(it); } 
}; 
+0

可不敢相信我錯過了。我應該更新那個麻煩的編譯器,以便它能夠正確顯示錯誤消息(這實際上是整個錯誤消息,而我的gcc版本真的很舊。) –

相關問題