所以我有一個頭文件Graph.h。 在該頭文件中,我聲明瞭一個向量。C++向量的內部類
std::vector<Vertex*> vertexList;
該向量的元素的類型指針指向Vertex,它是Graph內部的類。 據我所知,這迫使我在標題中定義Vertex類,或者忘記將它作爲一個內部類。
我真正想做的只是在Graph.cpp文件中定義這個Vertex類。我怎樣才能做到這一點?
我希望我的問題很清楚。我來自Java世界,其中這樣的事情更直接。
所以我有一個頭文件Graph.h。 在該頭文件中,我聲明瞭一個向量。C++向量的內部類
std::vector<Vertex*> vertexList;
該向量的元素的類型指針指向Vertex,它是Graph內部的類。 據我所知,這迫使我在標題中定義Vertex類,或者忘記將它作爲一個內部類。
我真正想做的只是在Graph.cpp文件中定義這個Vertex類。我怎樣才能做到這一點?
我希望我的問題很清楚。我來自Java世界,其中這樣的事情更直接。
如果您「再談到其實不必實現頂點的所有方法,你可以用作用域做到在.cpp文件中你會爲圖形類的方法相同: //graph.h 類圖{
Graph();
class Vertex {
Vertex();
}
vector<Vertex*> vertexList;
};
//graph.cpp
Graph::Graph() {
//...
}
Graph::Vertex::Vertex() {
//...
}
如果你想頂點的整個定義,只能在.cpp文件,你可以使用前置聲明:
//graph.h
class Vertex; //forward declaration
class Graph {
Graph();
vector<Vertex*> vertexList;
};
//graph.cpp
class Vertex {
Vertex();
}
Vertex::Vertex() {...}
Graph::Graph() {...}
公共頭部可以前瞻性聲明Vertex
類:
class Vertex;
這將使使用的是指針的任何地方。
在您的實現(私有)類,你可以定義類體和方法:
class Vertex { ... };
的代碼只有部分,實際使用頂點的方法,需要有訪問類型定義。
如果只想使用類作爲一個指針,它足以做到這一點:
class Graph {
public:
class Vertex;
};
而且你可以在其他地方做休息,就像這樣:
class Graph::Vertex {
...
};
在C++中,我們通常爲每個類都包含接口.h文件類和一個包含具體實現的C++文件。通常你會在Graph.h中包含vertex.h。唯一會搞砸的是,如果兩個.h文件相互依賴。在這種情況下,您可以使用一行在圖類聲明前轉發graph.h頭文件中的聲明class Vertex;
。
'std :: vector vertexList;'? –
Mehrdad
2013-04-21 01:46:57