본문 바로가기

Programming/Windows Visual C++

.h파일 include하는 올바른 방법

  • 서로 클래스가 물고 물리는 경우 어떻게 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{
      ...
      }