Erro do compilador C3104
argumento de atributo inválido
Você especificou um argumento inválido para um atributo.
Consulte Tipos de parâmetro de atributo para obter mais informações.
Esse erro pode ser gerado como resultado do trabalho de conformidade do compilador que foi feito para o Visual Studio 2005: ao passar matrizes gerenciadas para atributos personalizados, o tipo da matriz não é mais deduzido da lista de inicialização agregada. O compilador agora exige que você especifique o tipo da matriz, bem como a lista de inicializadores.
Exemplos
A amostra a seguir gera 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{};
A amostra a seguir gera 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 {};