"error C3867:"XXX": 함수 호출에 부족한 매개 변수 목록;"&XX"를 사용하여 구성원을 가리키는 포인터를 만드는 오류

1515 단어 Error집합
한 클래스에서 함수 바늘을 설명하고 다른 클래스에서 함수를 설명하며 이 함수 주소를 바늘에 부여할 때 "error C3867:"XXX": 함수 호출에 부족한 매개 변수 목록;"&XX"를 사용하여 구성원에 대한 포인터를 만드는 오류:
 
/*CSeries.h*/

typedef void (CALLBACK* ONSERIESREAD)(void * pOwner, BYTE* buf, DWORD dwBufLen );

class CSeries
{
public:
	CSeries(void);
	~CSeries(void);
public:
	ONSERIESREAD m_OnSeriesRead; 
};

다른 클래스:
/*CSerAssistantDlg.h*/

class CSerAssistantDlg : public CDialog
{
private:
	void CALLBACK OnRecData(void * pOwner, BYTE* buf, DWORD dwBufLen);
};

//--------------------------- -------------------------
CSeries *mySer = new CSeries;
mySer->m_OnSeriesRead = OnRecData;

다음과 같은 오류가 발생했습니다.
 
 
error C3867: “CSerAssistantDlg::OnRecData”:  ; “&CSerAssistantDlg::OnRecData” 

오류 원인은 정적 구성원 함수의 주소는 일반 함수 바늘로 저장할 수 있고 일반 구성원 함수 주소는 클래스 구성원 함수 바늘로 저장해야 하기 때문이다. 일반 구성원 함수가 실행될 때 우리는 그가 어떤 클래스 대상에 속하는지 확인해야 하기 때문이다. 클래스의static 함수는 이 클래스에 속하지 않는다. 그는 컴파일러 컴파일러 시기에 이미 확정된 것이다.일반 구성원 함수는 클래스 대상이 있어야만 실행할 수 있습니다.OnRecData는 일반 구성원 함수 주소입니다.
 
	 : :class A{ 
				public:		
				        static void func1();
					void func2();};
			 :		typedef void (*b)();
						b myfunc1 = func1;	//valid
						b myfunc2 = func2;      //error

 
 
 
 
 
다음과 같이 수정하면 됩니다.
static void CALLBACK OnRecData(void * pOwner, BYTE* buf, DWORD dwBufLen);

 
 
 
 
 
 

좋은 웹페이지 즐겨찾기