所以我有一个头文件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