서로 클래스가 물고 물리는 경우 어떻게 include를 해야 syntax에러가 안나올 수 있을까?
stdafx.h에 모든 header file을 include한다고 했을 때, 윗쪽에 선언된 클래스는 아랫쪽에 선언된 클래스를 알지 못한다. 그래서 일단 #include하는 순서가 중요하다.
- 하지만 클래스가 서로를 물고 물리는 recursive형태를 가지게 되면 #include가 중복으로 되든지 아니면 #pragma once에 의해 #include를 해도 어느쪽에서는 무시되어 여전히 서로를 알아보지 못한다.
- 유일한 방법은 class a;를 header파일 윗쪽에 써주는 것이다.
구체적으로 class A, B, C가 있다고 생각해보자. A는 B* b, C* c 를 멤버변수로 갖는다. B는 A* a를 멤버변수로 갖고 C도 마찬가지로 A* a를 멤버변수로 갖는다. 이 때 해결책은 아래와 같다.
일단 stdafx.h에 순서대로 include를 해주면 최소한 B와 C는 A의 정체를 안다. 다만 A는 B,C를 모른다.
//stdafx.h #include A; #include B; #include C;
이 때 A.h에다가 아래와 같이 클래스 B와 C를 선언해준다. 그러면 A는 비록 #include B,C를 하지 않았지만 B와 C가 있음을 알게되고 컴파일이 잘 된다.
class B; class C; class A{ ... }
'Programming > Windows Visual C++' 카테고리의 다른 글
/MT /MD 옵션의 차이 (0) | 2020.03.16 |
---|---|
.lib와 .dll의 차이 (0) | 2020.03.16 |
윈도우 서비란 무엇인가? 서비스 만들기 (0) | 2020.03.16 |
함수에서 문자열을 리턴하는 올바른 방법 (0) | 2020.03.16 |
Rabbitmq-c 와 CURL 라이브러리 사용법 (0) | 2020.03.16 |