Erreur du compilateur C2843
'membre' : ne peut pas prendre l'adresse d'une donnée membre non static ni d'une méthode de type managé ou WinRT
Une instance est requise pour prendre l'adresse des membres de données non statiques d'une interface ou d'une classe managée ou WinRT.
L'exemple suivant génère l'erreur C2843 et montre comment la corriger :
// C2843_2.cpp
// compile with: /clr
public ref class C {
public:
int m_i;
};
ref struct MyStruct {
static void sf() {}
void f() {}
};
int main() {
MyStruct ^ps = gcnew MyStruct;
void (__clrcall MyStruct::*F1)() = & MyStruct::f; // C2843
void (__clrcall MyStruct::*F2)() = & ps->f; // C2843
void (__clrcall MyStruct::*F3)(); // C2843
void (__clrcall *F5)() = MyStruct::sf; // OK
void (__clrcall *F6)() = & ps->sf; // OK
interior_ptr<int> i = &C::m_i; // C2843
C ^x = gcnew C();
interior_ptr<int> ii = &x->m_i;
}