"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);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
알림: 현재 지점의 최신 제출이 대응하는 원격 지점보다 뒤떨어지기 때문에 업데이트가 거부됩니다.알림: 다시 밀어넣기 전에 원격 변경과 합칩니다. (예를 들어'git pull...')자세한 내용은 "git push --help"의 "Nogitpush를 사용하다가 오류가 발생했습니다. git fetch origin master 입력: 분기 보기: 로컬 브랜치와 원격 브랜치의 차이점을 살펴보십시오. 결합: 서류 11이 많아졌어요. 로컬 기준으로 덮어쓰...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.