Delen via


Compilerfout C3918

gebruik vereist dat lid een gegevenslid is

Opmerkingen

C3918 kan om verschillende redenen optreden die betrekking hebben op gebeurtenissen.

Voorbeelden

C3918 kan optreden omdat een klasselid vereist is in de huidige context. In het volgende voorbeeld wordt C3918 gegenereerd.

// C3918.cpp
// compile with: /clr /c
public ref class C {
public:
   System::Object ^ o;
   delegate void Del();

   event Del^ MyEvent {
      void add(Del^ev) {
         if ( MyEvent != nullptr) {}   // C3918
         if ( o != nullptr) {}   // OK
   }
   void remove(Del^){}
   }
};

C3918 wordt ook veroorzaakt als u probeert een eenvoudige gebeurtenis te controleren op null (de gebeurtenisnaam biedt geen directe toegang meer tot de backing store delegate voor de gebeurtenis).

In het volgende voorbeeld wordt C3918 gegenereerd.

// C3918_2.cpp
// compile with: /clr /c
using namespace System;
public delegate int MyDel(int);

interface struct IEFace {
   event MyDel ^ E;
};

ref struct EventSource : public IEFace {
   virtual event MyDel ^ E;
   void Fire_E(int i) {
      if (E)   // C3918
         E(i);
   }
};

C3918 kan ook optreden als u zich onjuist abonneert op een gebeurtenis. In het volgende voorbeeld wordt C3918 gegenereerd.

// C3918_3.cpp
// compile with: /clr /c
using namespace System;

public delegate void del();

public ref class A {
public:
   event del^ e {
      void add(del ^handler ) {
         d += handler;
      }

      void remove(del ^handler) {
         d -= handler;
      }

      void raise() {
         d();
      }
   }

   del^ d;
   void f() {}

   A() {
      e = gcnew del(this, &A::f);   // C3918
      // try the following line instead
      // e += gcnew del(this, &A::f);
      e();
   }
};

int main() {
   A a;
}