컴파일러 오류 C3703
'이벤트 처리기': 이벤트 처리기 메서드는 원본 'event'와 동일한 스토리지 클래스를 가져야 합니다.
이벤트에는 연결된 이벤트 처리기와 다른 스토리지 클래스가 있습니다. 예를 들어 이벤트 처리기가 정적 멤버 함수이고 이벤트가 정적이지 않은 경우 이 오류가 발생합니다. 이 오류를 해결하려면 이벤트와 이벤트 처리기에 동일한 스토리지 클래스를 지정합니다.
다음 샘플에서는 C3703을 생성합니다.
// C3703.cpp
// C3703 expected
#include <stdio.h>
[event_source(type=native)]
class CEventSrc {
public:
__event static void MyEvent();
};
[event_receiver(type=native)]
class CEventHandler {
public:
// delete the following line to resolve
void MyHandler() {}
// try the following line instead
// static void MyHandler() {}
void HookIt(CEventSrc* pSource) {
__hook(CEventSrc::MyEvent, pSource, &CEventHandler::MyHandler);
}
void UnhookIt(CEventSrc* pSource) {
__unhook(CEventSrc::MyEvent, pSource, &CEventHandler::MyHandler);
}
};
int main() {
CEventSrc src;
CEventHandler hnd;
hnd.HookIt(&src);
__raise src.MyEvent();
hnd.UnhookIt(&src);
}