我正嘗試使用嵌套類Vertex
和Edge
創建Graph
類。我想讓我的Vertex
類接受通用參數。我已經向前宣佈我的Vertex
課程,以便我可以在我的Edge
課程中使用它。如何實現模板類的前向聲明
當我使用模板時,出現一些我不確定如何解決的錯誤。
這是我試過的。錯誤在每行旁邊註釋掉。
class Graph
{
private:
template <class T>
class Vertex; // Forward Declaration
template <class T>
vector<Vertex<T> > vertices; // Err: member 'vertices' declared as a template
class Edge
{
public:
template <class T>
Vertex<T>& _orig; // Err: member '_orig' declared as a template
template <class T>
Vertex<T>& _dest; // Err: member '_dest' declared as a template
template <class T>
Edge(Vertex<T>& orig, Vertex<T>& dest) : _orig(orig), // Err: member initializer '_orig' does not name a non-static data member or base class
_dest(dest) { }
template <class T>
Vertex<T>& getOrig() { return _orig; } // Err: use of undeclared identifier '_orig'
template <class T>
Vertex<T>& getDest() { return _dest; } // Err: use of undeclared identifier '_dest'
};
template <typename T>
class Vertex
{
public:
T _data;
vector<Edge> _edges;
Vertex(T data) : _data(data) { }
void addEdgeToVertex(Edge& edge)
{
_edges.push_back(edge);
}
};
public:
template <typename T>
void addEdge(Vertex<T>& orig, Vertex<T>& dest)
{
Edge edge(orig, dest);
orig.addEdgeToVertex(edge);
dest.addEdgeToVertex(edge);
}
};
你能幫我指出我做錯了什麼嗎?我怎樣才能解決這個問題?
簡化問題:看看如何聲明,它不需要預先聲明的模板數據成員。 – juanchopanza
你不能有不是靜態的模板變量... –