Condividi tramite


Errore del compilatore C3918

l'utilizzo richiede che 'member' sia un membro dati

L'errore C3918 può verificarsi per diversi motivi correlati agli eventi.

Esempi

L'errore C3918 può verificarsi perché è necessario un membro della classe nel contesto corrente. L'esempio seguente genera l'errore C3918.

// 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 è causato anche se si tenta di controllare un evento semplice per null (il nome dell'evento non fornirà più l'accesso diretto al delegato dell'archivio di backup per l'evento).

L'esempio seguente genera l'errore C3918.

// 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 può verificarsi anche se si sottoscrive erroneamente un evento. L'esempio seguente genera l'errore C3918.

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