구문 오류에 대해서 질문입니다.

balgarac1의 이미지

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;
 
 
};
 
#endif

kukyakya의 이미지

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
balgarac1의 이미지

조언 덕분에 잘 해결하고 좋은 지식 잘 얻어 갑니다. 감사합니다 ^^ !!!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.