2013-04-21 3 views
0

그래서 헤더 파일 인 Graph.h가 있습니다. 해당 헤더 파일 내에서 벡터를 선언합니다.내부 클래스의 C++ 벡터

std::vector<Vertex*> vertexList; 

이 벡터의 요소는 Graph의 내부 클래스 인 Vertex에 대한 포인터 유형입니다. 필자가 아는 한, 이것은 헤더에 Vertex 클래스를 정의하거나 내부 클래스로 사용하는 것을 잊어 버리게합니다.

내가 정말로하고 싶은 것은이 Vertex 클래스를 Graph.cpp 파일 내에 정의하는 것뿐입니다. 어떻게해야합니까?

제 질문에 대한 답변을 드리겠습니다. 나는이 같은 것들이 더 간단한 자바 세상에서 왔습니다.

+0

'std :: vector vertexList;는 어떻습니까? – Mehrdad

답변

1

당신이 만약 실제로 Vertex의 모든 메소드를 구현해야하는 경우, Graph 클래스와 동일한 방식으로 .cpp 파일의 범위 지정을 사용하여 수행 할 수 있습니다. //graph.h 클래스 그래프 {

Graph(); 

    class Vertex { 
    Vertex(); 
    } 

vector<Vertex*> vertexList; 
}; 

//graph.cpp 
Graph::Graph() { 

//... 
} 

Graph::Vertex::Vertex() { 
//... 

} 

만 .cpp 파일에있을 정점의 전체 정의를 원한다면, 당신은 선언을 앞으로 사용할 수 있습니다

C에서
//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

++ 우리는 일반적으로 각 클래스의 인터페이스를 포함하는 .H 파일이 , 그리고 구체적인 구현을 포함하는 C++ 파일을 포함한다. 일반적으로 Graph.h에 vertex.h를 포함합니다. 두 가지 .h 파일이 서로 의존하는 경우에만 문제가 해결됩니다. 이 경우 한 줄만 사용하여 그래프 클래스 선언 앞에 graph.h 헤더 파일에 class Vertex;을 선언 할 수 있습니다.