2017-03-08 127 views
3

我想創造類似這樣的結構:C++嵌套類方法

template <typename W> 
class Graph { 
public: 
    struct Vertex { 
     std::vector<typename Graph<W>::Vertex> next() { 
      return GetNext((*this)); 
     } 
    }; 
    virtual std::vector<typename Graph<W>::Vertex> GetNext(Vertex v) = 0; 
}; 

(不看缺少的字段等等)

我已經試過這樣的事情,但它給所有類型的錯誤,包括語法錯誤或「無法實例化」,甚至認爲我嘗試實例化GetNext覆蓋的派生類。

問題是:該結構甚至允許在C++中以及如何正確實現它?

+0

裏面'Vertex'(等內'圖'),你可以簡單地使用'Vertex'代替'類型名稱圖形 :: Vertex'。 – Jarod42

回答

4

您的代碼唯一的問題是您從Vertex呼叫GetNext,但Vertex沒有GetNext成員函數。

如果你想從Vertex調用Graph的方法,那麼你需要一個Graph變量來調用它,例如,一個成員變量:

struct Vertex { 
    Graph& graph; 

    std::vector<typename Graph<W>::Vertex> next() { 
     return graph.GetNext(*this); 
    } 
};