Error del compilador C3104
argumento de atributo no válido
Especificó un argumento no válido para un atributo.
Para más información, consulte Tipos de parámetros de atributo.
Este error se puede generar como resultado del trabajo de conformidad del compilador que se realizó para Visual Studio 2005: al pasar matrices administradas a atributos personalizados, el tipo de la matriz ya no se deduce de la lista de inicialización de agregados. El compilador ahora requiere que especifique el tipo de la matriz, así como la lista de inicializadores.
Ejemplos
El ejemplo siguiente genera el error 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{};
El ejemplo siguiente genera el error 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 {};