2013-04-21 61 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;