클래스가 서로 참조하도록 해서...

inootis의 이미지

// csb.cpp 파일
#include "csb.hpp"
..생략..

// csb.hpp 파일
#ifndef _CSS_HPP
#define _CAS_HPP

#include "csa.hpp"
class csB 
{
	csA m_a;
}

#endif

// csa.cpp 파일
#include "csa.hpp"
..생략..

// csa.hpp 파일
#ifndef _CSA_HPP
#define _CSA_HPP

#include "csb.hpp"
class csA
{
	csB m_b;
}

#endif

위의 클래스처럼...각 클래스가 서로 참조 하도록 하고...컴파일을...하니..
g++ -c csb.cpp
csa.hpp:7: 'csB' is used as a type, but is not defined as a type.

라는 메세지만 뿌리고 컴파일은 안되네요..

서로 참조할수 있도록 어떻게 해야하는지요?

hey의 이미지

서로 포함하면 당연히 안됩니다.
포인터를 넣으세요.

inootis wrote:
// csb.cpp 파일
#include "csb.hpp"
..생략..

// csb.hpp 파일
#ifndef _CSS_HPP
#define _CAS_HPP

#include "csa.hpp"
class csB 
{
	csA m_a;
}

#endif

// csa.cpp 파일
#include "csa.hpp"
..생략..

// csa.hpp 파일
#ifndef _CSA_HPP
#define _CSA_HPP

#include "csb.hpp"
class csA
{
	csB m_b;
}

#endif

위의 클래스처럼...각 클래스가 서로 참조 하도록 하고...컴파일을...하니..
g++ -c csb.cpp
csa.hpp:7: 'csB' is used as a type, but is not defined as a type.

라는 메세지만 뿌리고 컴파일은 안되네요..

서로 참조할수 있도록 어떻게 해야하는지요?


----------------------------
May the F/OSS be with you..


inootis의 이미지

hey wrote:
서로 포함하면 당연히 안됩니다.
포인터를 넣으세요.

포인터를 어떤식으로 사용해야하는거죠? ㅜㅠ. 이 문제만 해결되면 되는데 ㅜㅠ..

hey의 이미지

// csb.cpp 파일
#include "csb.hpp"
..생략..

// csb.hpp 파일
#ifndef _CSS_HPP
#define _CAS_HPP

#include "csa.hpp"
class csB
{
   csA* m_a;
}

#endif

// csa.cpp 파일
#include "csa.hpp"
..생략..

// csa.hpp 파일
#ifndef _CSA_HPP
#define _CSA_HPP

#include "csb.hpp"
class csA
{
   csB* m_b;
}

#endif

이렇게 하면 안되겠어요?


----------------------------
May the F/OSS be with you..


inootis의 이미지

csa.hpp:7: 'csB' is used as a type, but is not defined as a type.

그런문제가 아닌것 같은데요;;

인클루드 했음에도 불구하고 정의가 안되서 발생하는것 같은데.. 어찌 해결을..

hey의 이미지

inootis wrote:
csa.hpp:7: 'csB' is used as a type, but is not defined as a type.

그런문제가 아닌것 같은데요;;

인클루드 했음에도 불구하고 정의가 안되서 발생하는것 같은데.. 어찌 해결을..

(왜 자꾸 날아가지)

그것은요 csa.hpp가 class csA를 정의하기 전에 csb.hpp를 부르잖아요.
그런데 csb.hpp는 다시 csa.hpp를 부르고, ifndef가 있으니까 아직 에러는 내지 않지만
class csA는 아직도 정의되지 않은 상태에서 쓰려고 하니까 문제가 되는겁니다.
그럴 때는

class csB;
class csA {
    // blahblah;
    csB* m_b;
};

이런 식으로 하시면 됩니다.
포인터의 크기는 항상 같기 때문에 이렇게 임시로 선언을 해도 괜찮죠.

정의는 한 번 이상 하면 안되지만 선언은 여러 번 되어도 상관없거든요.


----------------------------
May the F/OSS be with you..


댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.