Partager via


Erreur du compilateur C3104

argument non conforme pour l’attribut

Vous avez spécifié un argument non valide pour un attribut.

Pour plus d’informations, consultez Types de paramètres d’attribut.

Cette erreur peut être générée suite au travail de conformité du compilateur effectué pour Visual Studio 2005 : lors du passage de tableaux managés à des attributs personnalisés, le type du tableau n’est plus déduit de la liste d’initialisation d’agrégation. Le compilateur vous oblige maintenant à spécifier le type du tableau ainsi que la liste d’initialiseurs.

Exemples

L’exemple suivant génère l’erreur C3104.

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

[AttributeUsage(AttributeTargets::Class)]
public ref struct ABC : public Attribute {
   ABC(array<int>^){}
   array<double> ^ param;
};

[ABC( {1,2,3}, param = {2.71, 3.14})]   // C3104
// try the following line instead
// [ABC( gcnew array<int> {1,2,3}, param = gcnew array<double>{2.71, 3.14})]
ref struct AStruct{};

L’exemple suivant génère l’erreur C3104.

// C3104b.cpp
// compile with: /clr /c
// C3104 expected
using namespace System;

int func() {
   return 0;
}

[attribute(All)]
ref class A {
public:
   A(int) {}
};

// Delete the following 2 lines to resolve.
[A(func())]
ref class B {};

// OK
[A(0)]
ref class B {};