2013-04-21 60 views
0

所以我有一個頭文件Graph.h。 在該頭文件中,我聲明瞭一個向量。C++向量的內部類

std::vector<Vertex*> vertexList; 

該向量的元素的類型指針指向Vertex,它是Graph內部的類。 據我所知,這迫使我在標題中定義Vertex類,或者忘記將它作爲一個內部類。

我真正想做的只是在Graph.cpp文件中定義這個Vertex類。我怎樣才能做到這一點?

我希望我的問題很清楚。我來自Java世界,其中這樣的事情更直接。

+0

'std :: vector vertexList;'? – Mehrdad 2013-04-21 01:46:57

回答

1

如果您「再談到其實不必實現頂點的所有方法,你可以用作用域做到在.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() {...} 
1

公共頭部可以前瞻性聲明Vertex類:

class Vertex; 

這將使使用的是指針的任何地方。

在您的實現(私有)類,你可以定義類體和方法:

class Vertex { ... }; 

的代碼只有部分,實際使用頂點的方法,需要有訪問類型定義。

1

如果只想使用類作爲一個指針,它足以做到這一點:

class Graph { 

public: 
    class Vertex; 

}; 

而且你可以在其他地方做休息,就像這樣:

class Graph::Vertex { 
    ... 
}; 
0

在C++中,我們通常爲每個類都包含接口.h文件類和一個包含具體實現的C++文件。通常你會在Graph.h中包含vertex.h。唯一會搞砸的是,如果兩個.h文件相互依賴。在這種情況下,您可以使用一行在圖類聲明前轉發graph.h頭文件中的聲明class Vertex;