Erreur du compilateur C3145
'objet' : une variable globale ou statique ne peut pas avoir de type managé ou WinRT 'type'
Vous pouvez uniquement définir des objets CLR ou WinRT dans la portée de la fonction.
L'exemple suivant génère l'erreur C3145 et montre comment la corriger :
// C3145.cpp
// compile with: /clr
using namespace System;
ref class G {};
G ^ ptr; // C3145
G ^ ptr2 = gcnew G; // C3145
ref class GlobalObjects {
public:
static G ^ ptr; // OK
static G ^ ptr2 = gcnew G; // OK
};
int main() {
G ^ ptr; // OK
G ^ ptr2 = gcnew G; // OK
}
L'exemple suivant génère l'erreur C3145 :
// C3145b.cpp
// compile with: /clr
ref class MyClass {
public:
static int data;
};
interior_ptr<int> p = &(MyClass::data); // C3145
void Test(interior_ptr<int> x) {}
int main() {
MyClass ^ h_MyClass = gcnew MyClass;
interior_ptr<int> p = &(h_MyClass->data);
}