[질문]헤더인클루드문제점...
지음
#pragma once
int g_Score;
int g_Speed;
int g_Level;
int g_Screenx,g_Screeny;
int g_Rigth,g_Width;
int g_Bpat[7][8]={ //블록모양저장
{1,1,1,1,0,0,0,0}, //0
{0,1,1,0,0,1,1,0}, //1
{1,1,0,0,0,0,1,1}, //2
{0,0,1,1,1,1,0,0}, //3
{0,1,1,1,0,0,1,0}, //4
{0,1,0,0,0,1,1,1}, //5
{0,0,0,1,0,1,1,1},
};
void drawscreen();
void blockleft();
void blockrigth();
void blockdown();
void blockrotate();
void blockdel();
위소스를 만들어서 헤더에 저장햇습니다. 그리고 main에 인클루드했죠..
그리고 함수들의 정의 파일을 만들어서 위해더를 인클루스시켰습니다.
#include windows.h
#include Resource.h
#include Tetris.h
메인부분에 이렇게 인클루드하엿는데 문제가 발생하더군요..ㅡㅡ;
첨부된 소스를 확인해보시면 분명 중복컴파일 된다고 하는듯 보여지더군요
#pragma once 를 사용해서 중복컴파일되는 헤더에 넣어줫는데요..ㅡㅡ;
그래도 자꾸 에러가발생합니다.ㅡㅡ; 콘솔환경에서도 분할파일을 만들어서 제작을 햇엇는데 API에서는 자꾸에러를 발생하네요
소스수정해보니깐 헤더파일에 변수들을 제거한후에 컴파일하니깐 잘되더군요 헤더파일에 변수선언은 할수없엇나요?
문제점이 뭔지를 감이안잡혀서 이렇게 질문드립니다.
-
애기
답변해주셔서 감사합니다. extern키워드 쓰니깐 해결은 되는군요...^^
-
초코맛캔디
변수 정의를 tetris.cpp 에서 해주시고 tetris.h 에 extern으로 선언하세요!
-
구슬
소스는 안봤습니다. (코드보기 지겨워서.. ^^;)
일반적으로, 헤더파일에 #pragma once을 사용하거나 또는 #ifdef 매크로를 사용하여 중복참조가 되지 않도록 합니다만. 서로 참조(incule)을 하는 경우나 참조가 서로 엉키는 경우는 제대로 되지 않습니다. 특히, 변수같은 경우는 서로 헤더파일끼리 참조되는 경우, extern을 사용해야 합니다.
해결책은 헤더파일들이 서로 #include로 참조되지 않도록 해보세요. 가령, A.h, B.h