구문 오류에 대해서 질문입니다.
글쓴이: balgarac1 / 작성시간: 목, 2014/10/30 - 10:37오후
user 구조체를 정의했습니다.
#ifndef __USER_H__
#define __USER_H__
#include "ThreadClient.h"
#include "commandHandler.h"
typedef struct _user
{
commandHandler *cmdHand;
SOCKET sock;
char ID[25];
} User;
#endif
commandHandler 클래스에서 User 구조체를 사용하기 위해 헤더 파일을 포함했는데 User가 선언된 부분에서는 전부다 구문 오류가 납니다.
세미 콜론을 빼먹은 것도 아닌데 왜 뜬금없이 구문오류가 나는지 잘 모르겠습니다.
#ifndef _COMMNAD_HANDLER_H_
#define _COMMAND_HANDLER_H_
#include <map>
#include <iostream>
#include "ThreadClient.h"
#include "user.h"
using namespace std;
class commandHandler
{
private:
char cmd[20];
char sendBuff[BUFSIZ];
typedef void (*cmdHandler)(User&);
public:
commandHandler();
~commandHandler();
void who(User&);
void quit(User&);
void user(User&);
void talk(User&);
void help(User&);
void debug(User&);
map<char *, cmdHandler> cmdHandlerMap;
pair<map<char *, cmdHandler>::iterator, bool> mpair;
};
#endifForums:


User는 commandHandler를 필요로 하고,
User는 commandHandler를 필요로 하고, commandHandler는 다시 User를 필요로 해서 생기는 순환 오류입니다.
어차피 User에는 commandHandler의 포인터만 필요하니 commandHandler.h를 include하지 마시고 forward declaration만 해주시면 될 것 같습니다.
또한 c binding을 별도로 제공하실 계획이 아니시라면 struct는 따로 typedef하지 않으셔도 됩니다.
#ifndef __USER_H__ #define __USER_H__ #include "ThreadClient.h" //#include "commandHandler.h" class commandHandler; struct User { commandHandler *cmdHand; SOCKET sock; char ID[25]; // std::string을 사용하는 것이 더 나음 }; #endif답변 감사합니다.
조언 덕분에 잘 해결하고 좋은 지식 잘 얻어 갑니다. 감사합니다 ^^ !!!
댓글 달기