------

[ AD ] Port Monitor ( Try to use a Best WebSite Monitoring Tool )

------

1.main.c                         2.ClassA.h                  3.ClassZ.h

#include "ClassA.h"        class ClassA               class ClassZ
#inlcude "ClassZ.h"        {                                {
                                          int ax;                         int zx;
int main()                             int ay;                         int zy;
{                                         ClassZ * pz;               ClassA *pa;
     int ma;                       }                                }
     ClassA a;
     ClassZ z;
     int mb;
}

자..정상적인 부분을 이해하셨다면 뭐가 문제인지 아실겁니다~


자..정상적인 부분을 이해하셨다면 뭐가 문제인지 아실겁니다~

main.c에 정체불명의 "ClassA a;"를 만났습니다. ClassA.h를 쫓아갑니다.

ClassA.h에 정체불명의 ClassZ * pz;를 만났습니다. ClassZ.h를 쫓아갑니다.
ClassZ.h에 정체불명의 ClassA * pa;를 만났습니다. ClassA.h를 쫓아갑니다.

ClassA.h에 정체불명의 ClassZ * pz;를 만났습니다. ClassZ.h를 쫓아갑니다.
ClassZ.h에 정체불명의 ClassA * pa;를 만났습니다. ClassA.h를 쫓아갑니다.

다행일지 몰라도 컴파일러는 나름 똑똑한지 계속 무한루프를 돌진 않군요~

"ClassZ * pz;가 뭡니까? 식별할 수 있는게 필요합니다. 이런식으로 나오믄 크기를 걍 int형으로 생각해버리겠습니다"
이렇게 경고를 줍니다~젤 위에 사진의 내용이 이런 식입니다^^


우선 문제가 제가 예전에 무언가 만들다가 상호참조가 자주 발생했었는데
현재는 어떻게 저렇게 만드는지 이해가 가질 않는군요^^

간략히 상호 참조를 해결하려면 ClassA나 ClassZ의 헤더파일에 해더를 인클루드하지말고 간단히 Class가 있다고 정의만 내려줍니다~

ClassZ.h 이파일을 수정해보겠습니다.

class ClassA;

class ClassZ
{
     int zx;
     int zy;
     ClassA * pa;
}

ClassZ.h가 있다면 ClassZ.c파일이 있겠죠~
ClassZ.c파일에서 간단히 #include "ClassA.h"로 인클루드만 하시면 회피합니다.

class ClassA;를 선언함으로써 "글쎄 obj가 없어도 일단 이런 클래스가 있다는 가정하에 님부터 크기를 파악해줘"라는게 됩니다.

그럼 일단 ClassZ.obj를 "ClassA"라는 클래스가 있다는 가정하에 만들게 되고, 오브젝트를 모두 만든후에 링크를 걸때는 classZ.c에 선언된 헤더를 보고 링크를 걸게 되는거죠~


, , , , , , , ,

'온라인게임 > vc++' 카테고리의 다른 글

사용 클래스의 싱글턴으로 구성  (0) 2010.10.08
줄번호 visual studio c++ 2010  (0) 2010.10.08
visual studio 2010 동영상 강좌 / 강의  (0) 2010.10.07
단축키 visual studio 2010  (0) 2010.10.07
Pre-processor(전처리기)  (0) 2010.10.07

+ Recent posts