c++에서 서로 다른 헤더가 잇는데..

aNsITAte의 이미지

a.h
#ifndef _A_
#define _A_
#include "b.h"
#include "c.h"
#include <...>
..
#endif

b.h
#ifndef _B_
#define _B_
#include "a.h"
#inlcude "c.h"
#include <...>
..
#endif

c.h
#ifndef _C_
#define _C_
#include <...>
..
#endif

d.h
#ifndef _D_
#define _D_
#include "a.h"
#inlcude "b.h"
#inlcude "c.h"
#include <...>
..
#endif

이렇게 헤더파일이 있을때 a, b에서 컴파일러가 a에서는 b에 있는 클래스를 b에서는 a에 있는 클래스를 찾지못한다고 에러를 내는데 -_-;;

이게 정상적인 건가요?

웃기게도 a, b두개의 헤더중에서 하나의 헤더에서 다른 것을 제외한 상태에서는 정상적인 컴파일이 됩니다.
그냥 같은 소스인데도 그 헤더를 추가만 하면 무조건 에러를 내는군요;

어떻게 해결은 안될까요?

kane의 이미지

a.h

// #include "b.h"
class B;

class A
{
    ...
}

b.h
// #include "a.h"
class A;

class B
{
    ...
}

이렇게 해보세요.
doldori의 이미지

// a.h
#include "b.h"
class A { B b; };

// b.h
#include "a.h"
class B { A a; };

이런 형태의 상호 참조는 불가능합니다. 전처리 후의 코드를 살펴보면 그 이유를
알 수 있을 겁니다. 적어도 한쪽은 kane님의 방법대로 전방 선언과 함께 포인터나
참조형을 써야 합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.