2013-01-24 2 views
1
#define UCHAR unsigned char 

typedef bool (*FUNC)(UCHAR uc1, UCHAR uc2); 
typedef void(*PF)(FUNC, UCHAR*); 
PF Assign; 

class Class { 
    private: 
     UCHAR buf[32]; 
     bool func(UCHAR c1, UCHAR c2) { } 

    public: 
     Class::Class(void) { 
      Assign(func, buf);   // <<< Microsoft VC++ error C3867 
     } 

     Class::~Class() { } 
}; 

error C3867: 'Class::func': function call missing argument list; use '&Class::func' to create a pointer to member비주얼 C++ 오류는 C3867 및 C2664

나는이 오류가

Assign(&Class::func, buf); // <<< Microsoft VC++ error C2664

위의 오류 메시지의 제안을 시도하는 경우 이 Assign() 함수를 컴파일하면됩니까? 이 typedef는 인터페이스해야하는 라이브러리의 typedef입니다.

+0

이에게 행동을 절대하지 마십시오 : 당신이 "포인터"당신이 std::function에 보일 것입니다 일반적인 기능이 필요하면

'typedef unsigned char UCHAR; ' –

답변

1

func은 비 정적 멤버 함수이므로 Assignbool (*)(UCHAR, UCHAR) 인 반면 해당 유형은 bool (Class::*)(UCHAR, UCHAR)입니다. 비 정적 멤버 함수를 비 멤버 함수로 변환 할 수 없습니다.

funcAssign에 전달하려면 func을 고정시켜야합니다.

1

, 타입 및 별명 FUNCPF이 멤버 함수 포인터 아니며, 단지 정적 멤버 함수를 가리 키도록 사용될 수있다. 그 이유는 모든 비 정적 멤버 함수가 this 포인터에 대한 암시 적 첫 번째 인수를 갖고 있기 때문입니다. 항상 형식 정의를 사용하여, 예를 들어, -`#DEFINE의 UCHAR 부호 char`을 :

typedef std::function<bool(UCHAR uc1, UCHAR uc2)> FUNC; 
typedef std::function<void(FUNC, UCHAR*)> PF; 
PF Assign; 

Class::Class(void) { 
    Assign(std::bind(&Class::func, *this), buf); 
} 
+0

하지만 세 번째 부분 라이브러리 typedef와 PF Assign을 수정할 수 없습니다. 선. func를 정적으로 만들면 클래스 변수에 액세스 할 수 없습니다. 이 오류가 발생합니다 : 오류 C2597 : 비 정적 멤버 '클래스 :: buf'에 대한 잘못된 참조 – user292344

+0

@ user292344 'FUNC' 및'PF '형식이 타사 라이브러리의 일부인 경우 질문에 상태를 표시해야합니다 . 이 경우 디자인을 재고해야합니다. –