所以我有一个头文件Graph.h。 在该头文件中,我声明了一个向量。
std::vector<Vertex*> vertexList;
此向量的元素是Vertex的类型指针,Vertex是Graph内部的类。 据我所知,这迫使我要么在标题中定义Vertex类,要么忘记将它作为一个内部类完全放弃。
我真正想要做的只是在Graph.cpp文件中定义这个Vertex类。我怎么能这样做?
我希望我的问题很明确。我来自Java世界,这样的事情更直接。
答案 0 :(得分:1)
您可以在公共标头中转发声明Vertex
类:
class Vertex;
这样可以在任何地方使用它的指针。
在您的实现(私有)类中,您可以定义类主体和方法:
class Vertex { ... };
只有实际使用Vertex方法的部分代码才需要访问类型定义。
答案 1 :(得分:1)
如果您只想将该类用作指针,则执行此操作就足够了:
class Graph {
public:
class Vertex;
};
你可以在其他地方做其他事情,比如:
class Graph::Vertex {
...
};
答案 2 :(得分:1)
如果您正在讨论实际上必须实现Vertex的所有方法,您可以使用.cpp文件中的作用域,就像使用Graph类一样: //graph.h class Graph {
Graph();
class Vertex {
Vertex();
}
vector<Vertex*> vertexList;
};
//graph.cpp
Graph::Graph() {
//...
}
Graph::Vertex::Vertex() {
//...
}
如果您希望Vertex的整个定义仅在.cpp文件中,您可以使用前向声明:
//graph.h
class Vertex; //forward declaration
class Graph {
Graph();
vector<Vertex*> vertexList;
};
//graph.cpp
class Vertex {
Vertex();
}
Vertex::Vertex() {...}
Graph::Graph() {...}
答案 3 :(得分:0)
在c ++中,我们通常为每个类都有一个包含该类接口的.h文件,以及一个包含具体实现的c ++文件。通常,您将在Graph.h中包含vertex.h。如果两个.h文件相互依赖,唯一会让事情变得混乱的事情。在这种情况下,您可以在图类声明之前使用一行在graph.h头文件中转发声明class Vertex;
。