상속받은 상위 클래스의 함수나 변수를 사용하는 방법에 대해 질문드립니다.

35 views
Skip to first unread message

피군

unread,
Jan 13, 2008, 9:48:29 PM1/13/08
to squirrelusers-kr
질문을 하지 않고 혼자서 알아보려고 해도
매뉴얼을 보고 찾아봐도 잘 모르는 부분이 생기네요.

class CBase
{
public:
VOID SetTrue(BOOL bTrue);
};

class CChild : public CBase
{
VOID Initialize();
VOID Event();
};

VOID CChild::Initialize()
{
SquirrelVM::Init();
SqPlus::SQClassDef<CBase>(_T("CBase")).
func(&CBase::SetTrue, _T("SetTrue"));

SqPlus::SQClassDef<CChild>(_T("CChild"));

SquirrelObject callClassFunc =
SquirrelVM::CompileScript(_T("class.nut"));
SquirrelVM::RunScript(callClassFunc);
}

VOID CChild::Event()
{
SqPlus::SquirrelFunction<void>(_T("ClassTest"))(this);
}

////////////
class.nut

function ClassTest(localpointer)
{
print("Method Call 1nd");
localpointer.SetTrue( 1 ); //BOOL 이 type int 라 true를 넣어주
면 에러가 나더라구요.
}

///////////////////////////
이렇게 해봤는데 에러가 나네요. 아무래도 CBase 클래스의 SetTrue 함수를 CChild 클래스의 함수로 인식하지
못해서 생기는 현상인 거 같습니다.

물론 Event() 함수에서
SqPlus::SquirrelFunction<void>(_T("ClassTest"))((CBase*)this); 이렇게
CBase 포인터로 보내면 가능하지만
그렇게 되면 본래 CChild의 함수를 쓸 수 없을거 같습니다.

조금의 힌트라도 주신다면 감사하겠습니다.

피군

unread,
Jan 14, 2008, 1:08:44 AM1/14/08
to squirrelusers-kr
일단 또 자답입니다. (확신이 가진 않지만요..)

여기 저기 찾아보니 어떤 분이 이런 식으로 사용을 하더라구요.

SqPlus::SquirrelFunction<void>(_T("ClassTest"))(this);

이렇게 호출하기 전에

SqPlus::SQClassDef<CBase>(_T("CBase")).
func(&CBase::SetTrue, _T("SetTrue"));

SqPlus::SQClassDef<CChild>(_T("CChild"), _T("CBase")).
func(&CChild::ChildFunction, _T("ChildFunction"));

이렇게 Define을 해주었더니 정상적으로 작동을 하네요.
이게 맞는 방법인지 잘 모르겠습니다. ;;

이렇게 했더니 Child의 함수와 Base의 함수를 동시에 사용할 수 있게 되었습니다.

yagur

unread,
Jan 14, 2008, 9:55:15 AM1/14/08
to squirrelusers-kr
해결하셨군요 :)

피군

unread,
Jan 17, 2008, 9:21:46 AM1/17/08
to squirrelusers-kr
막 겨우 겨우 해결 해나가고 있죠.. ^^

그런게 또 매력 아니겠습니까 히힛. ^^;
Reply all
Reply to author
Forward
0 new messages