휴 2시간동안 끙끙되고 있는데도 안풀리네요.
왜 이런건지...
- 에러 2가지
StateProc.obj : error LNK2005: "unsigned short (*  BLOCK)[4][2][4]" (?BLOCK@@3PAY2313GA) already defined in DrawProc.obj
Debug/Network_T.exe : fatal error LNK1169: one or more multiply defined symbols found

------아래 소스 -------


//DrawProc.cpp

#include <windows.h>
#include <windowsx.h>
#include <ddraw.h>

#include "Draw.h"
#include "ZBascData.h"
#include "DrawProc.h"
#include "Block.h"             // 이녀석이 문제!!
#include "Utility.h"
#include "StateProc.h"
- 아래 생략 -
이 드로우프로시저 안에서 Block.h 안에 들은 BLOCK 배열을 사용합니다.


//Block.h
#ifndef _Block
#define _Block

WORD BLOCK[7][4][2][4] = {
- 아래 생략 -

이렇게 Block.h 안에서는 일단 ifndef 으로 선언되었는지 검사후에 선언 되었으면 맨 아래 #endif로
빠저나오게 했습니다. 한번 선언한걸 다시 선언하지 않도록 말이죠

//StateProc.cpp
#include <windows.h>
#include <windowsx.h>
#include <math.h>

#include "ZBascData.h"
#include "Block.h"                 //이녀석 문제.ㅡㅡ
#include "StateProc.h"

그리고 스테이트프로시저에 윗부분 입니다.
이곳에서도 Block.h를 선언하죠

이곳에서 이녀석을 선언 하고 나면 바로

StateProc.obj : error LNK2005: "unsigned short (*  BLOCK)[4][2][4]" (?BLOCK@@3PAY2313GA) already defined in DrawProc.obj
Debug/Network_T.exe : fatal error LNK1169: one or more multiply defined symbols found

이 에러가 납니다. 안되는 영어 실력으로 보아하니 DrawProc 오브젝트 파일안에 이미 선언이 되었다고 하는것 같은데요 (그래서 링크가 실패 하는거죠? )
그래서 일단 디버그 폴더를 지워서 없에 봤지만 역시 같구요.

드로우 프로시저와 스테이트 프로시저, 이 두군데 선언되어 잇는 Block.h 를 하나만 지워도
이 에러는 뜨지 않더군요.

Block.h 안에는 BLOCK 배열 밖에 안들어 있습니다.
이곳에 이 배열을 만들면서 초기화를 거치지요.

배열 초기화를 반복문 없이 생성할때 { } 를 사용해서 하기 위해서 구조체도 안썼습니다.
그냥 블럭헤더파일에는 블럭배열 달랑 하나 분...

그런데 다른 것들은 에러가 안납니다.
당연한게 아닌가;;

게임에 필요한 데이터를 전부 모아두는 ZBaseData.h 이곳에도 많은 변수들이 모여있고
한곳에서만 인크루드 시키는 것이 아닌 거의 모든 cpp 안에서 다 인크루드 시킵니다.

그러나 ifndef 과 endif 로 다시 선언 되는걸 막아서 별다른 에러가 없는 걸로 알고 있습니다.
분명 배울때도 그렇게 배웟는데......

혼란스럽군요~ 어째서 이 블럭.h는 왜 저런 에러를 내는 것인지......