[완료]include 순서에대한 질문입니다.
글쓴이: copower / 작성시간: 목, 2012/04/19 - 4:00오후
안녕하세요.
매번 많은 지식을 얻어가고 있는 초보자입니다.
오늘은 생각지도 않았던 include 순서에대한 문제에대해서 질문글을 올립니다...
main.cpp
// 아래가 선언 순서가 문제가 되는 부분입니다. #include "Book_LinkedList.h" #include "User_LinkedList.h" int main() { // 이런 부분 저런부분... }
User_LinkedList.h
// ... 다른 구조체 선언 부분 typedef struct U_LINKEDLIST { int nTotalUser; struct U_NODE *pUserHead; }userlinkedlist; // ...이런 함수 저런 함수 선언부분
Book_LinkedList.h
// ... 다른 구조체 선언 부분 typedef struct B_LINKEDLIST { int nTotalBook; struct B_NODE *pBookHead; }booklinkedlist; // ...이런 함수 저런 함수 선언부분 // 아래 두 함수가 문제의 함수 // 아래와 같이 하면 정상적으로 컴파일도 되고 기능도 동작합니다. int LendBook(booklinkedlist*, struct U_LINKEDLIST*); int ReturnBook(booklinkedlist*, struct U_LINKEDLIST*); // 아래와 같이 하면 구조체 변수명으로 변경해버리면 #include 순서 문제로 컴파일에서부터 다음과 같은 에러를 마구 뿜어냅니다. // error C2061: 구문 오류 : 식별자 'userlinkedlist' // error C2660: 'LendBook' : 함수는 2개의 매개 변수를 사용하지 않습니다. // error C2660: 'ReturnBook' : 함수는 2개의 매개 변수를 사용하지 않습니다. int LendBook(booklinkedlist*, userlinkedlist*); int ReturnBook(booklinkedlist*, userlinkedlist*);
사실 전자와 같이 사용하면 돌아가긴 하는데... 역시 함수 파라미터가 동일 하지 않은 것이 마음에 걸립니다.
그렇다고 메인 에서 헤더의 include 순서를 변경해버리면 역시 booklinkedlist의 구문 오류가 발생합니다.
무엇을 먼저 선언해도 답이 안나온 이 상황... -> 사실 근본적으로는 제가 잘못 설계해서 이러한 문제가 발생한것은 알고있습니다 :)
하지만 어떻게든 고쳐보고 싶어서 끙끙되고 있습니다...
다른 방법으로 시도해 본것은...
저 두함수만을 위한 .h와 .cpp를 만들어서 때려 넣어버렸습니다 :(
하지만 역시 이방법도.... 근본적인 해결 방법은 아닌것 같습니다.
어떻게 해결 해야할까요???
해결 방향이라도 알려주시면 열심히 연구해 보겠습니다 :)
Forums:
흔하게 발생하는 케이스입니다.
main.cpp인걸 봐서는 c++같네요. 그러면 전방선언으로 해결이 가능할 듯 합니다.
일단 typedef struct 대신 그냥 struct로 선언하시는게 좋을듯하구요.
User_LinkedList.h 에는..
....
struct userlinkedlist
{
int nTotalUser;
struct U_NODE *pUserHead;
};
struct booklinkedlist;
...
Book_LinkedList.h 에서는
...
struct booklinkedlist
{
int nTotalBook;
struct B_NODE *pBookHead;
};
struct userlinkedlist;
...
로 하시면 include 순서 상관없이 사용 가능합니다.
답변 감사합니다...
어이쿠 제가 생각을 잘못 한 부분이 있네요...
c++이 아니라 C로 구현한 프로그램이거든요....(사실, C++에서만 사용되는 구문이 들어가있을수도 있는데 이것을 구분 할 수 있는 실력은 아니네요...)
maic.c로 작성해야하는데, vs2010에서 다짜고짜 cpp로 만드는 바람에 이런 문제가 생겼네요...
말씀해주신대로 적용 했지만, typedef struct 구조체명 {...} 변수명; 으로 이미 변수면을 사용한 곳이 많아서...
어떻게 고쳐야 할지 난감하네요. 애시당초 잘 모르는 typedef struct를 쓰지 말았어야하는게 아닌가 합니다........
죄송합니다.
제가 본문을 제대로 읽어 보지 않고 해매고 있었군요...
말씀해주신대로 처리하였더니 해결되었습니다 :)
전방 선언이라는 기법에 대해서 공부 할 수있는 기회가 되었네요..
댓글 달기