Partager via


Erreur du compilateur C3225

l'argument de type générique de 'arg' ne peut pas être 'type', il doit s'agir d'un type valeur ou d'un type de handle

L'argument de type générique n'était pas du type correct.

Pour plus d'informations, consultez Génériques (extensions du composant C++).

Exemple

Vous ne pouvez pas instancier de type générique avec un type natif.L'exemple suivant génère l'erreur C3225 :

// C3225.cpp
// compile with: /clr
class A {};

ref class B {};

generic <class T>
ref class C {};

int main() {
   C<A>^ c = gcnew C<A>;   // C3225
   C<B^>^ c2 = gcnew C<B^>;   // OK
}

L'exemple suivant crée un composant à l'aide de C#.Remarquez que la contrainte spécifie que le type générique ne peut être instancié qu'avec un type valeur.

// C3225_b.cs
// compile with: /target:library
// a C# program
public class MyList<T> where T: struct {}

Cet exemple utilise le composant créé par C# et ne respecte pas la contrainte spécifiant que MyList ne peut être instancié qu'avec un type valeur autre que Nullable.L'exemple suivant génère l'erreur C3225 :

// C3225_c.cpp
// compile with: /clr
#using "C3225_b.dll"
ref class A {};
value class B {};
int main() {
   MyList<A> x;   // C3225
   MyList<B> y;   // OK
}