2011-05-02 3 views
1

정의 (Core.h는) :클래스 초기화시 비 정적 클래스 함수로 정적 함수 포인터를 초기화하는 방법은 무엇입니까?

static int (*foolink)(int*, char*, key*, key*); 

또한 Core.cpp에서 재정의. 이 코드의 원인 오류 :

foolink = this->step; 

오류 :

Engine/Core.cpp:31: error: argument of type 'int (Core::)(int*, char*, key*, key*)' does not match 'int (*)(int*, char*, key*, key*)' 

포인터 사용 :

(*foolink)(NULL, NULL, NULL, NULL); 

은 어떤 문제가 있습니까? 제발 도와주세요!

답변

3

C++ 프로그램에서 대부분 함수멤버 함수입니다. 즉, 그들은 수업의 일부입니다. 일반적인 함수 포인터을 사용하여 멤버 함수을 가리킬 수 없습니다. 대신 멤버 함수 포인터을 사용해야합니다. 귀하의 경우에는

, 당신은

 v you have to name the class here 
int (YourClass::*foolink)(int*, char*, key*, key*); 
foolink = &YourClass::step; 

// This is how you can call the function via member function pointer 
YourClass object, *pObject = &object; 
// One way is to envoke the function from object 
(object.*foolink)(...); 
// The other way is from pointer to object 
(pObject->*foolink)(...); 

C++ FAQ로 정의 할 수 있습니다 :

Pointers to Member Functions

+0

내가 어떻게 호출 할 수 있습니다? (Core :: * foolink) (NULL, NULL, NULL, NULL) 작동하지 않습니다! – HiTECNOLOGYs

+0

@HiTECNOLOGYs : funciton 호출과 관련된 답변을 업데이트하겠습니다. :) –

1

this->step 유형은 정수를 반환하고 int *, char *, key * 및 key *를 인수로 취하는 함수 여야합니다. 그것은 분명히 아닙니다. 클래스 메소드를 정상 함수에 할당하면 작동하지 않습니다. 그들은 둘 다 메소드가되어야합니다. 또는 둘 다 정상적인 함수가되어야합니다.하지만 믹스가 아닙니다. 이것이 당신이하려고하는 것입니다.

관련 문제