内部类的C ++向量

时间:2013-04-21 01:45:29

标签: c++ c++03

所以我有一个头文件Graph.h。 在该头文件中,我声明了一个向量。

std::vector<Vertex*> vertexList;

此向量的元素是Vertex的类型指针,Vertex是Graph内部的类。 据我所知,这迫使我要么在标题中定义Vertex类,要么忘记将它作为一个内部类完全放弃。

我真正想要做的只是在Graph.cpp文件中定义这个Vertex类。我怎么能这样做?

我希望我的问题很明确。我来自Java世界,这样的事情更直接。

4 个答案:

答案 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;