Freigeben über


Compilerfehler C3703

'Ereignishandler': Eine Ereignishandlermethode muss dieselbe Speicherklasse wie das Quellereignis aufweisen.

Bemerkungen

Ein Ereignis hat eine andere Speicherklasse als der Ereignishandler, mit dem es eingebunden ist. Dieser Fehler tritt beispielsweise auf, wenn der Ereignishandler eine statische Memberfunktion ist und das Ereignis nicht statisch ist. Um diesen Fehler zu beheben, weisen Sie dem Ereignis und dem Ereignishandler die gleiche Speicherklasse zu.

Example

Im folgenden Beispiel wird C3703 generiert:

// 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);
}