Freigeben über


Compilerfehler C3104

Aktualisiert: November 2007

Fehlermeldung

Ungültiges Attributargument
illegal attribute argument

Für ein Attribut wurde ein ungültiges Argument angegeben.

Weitere Informationen finden Sie unter Attribute Parameter Types.

Dieser Fehler kann infolge einer Verbesserung der Compilerkonformität für Visual C++ 2005 ausgegeben werden: Wenn verwaltete Arrays an benutzerdefinierte Attribute weitergegeben werden, wird der Arraytyp nicht mehr aus der Aggregatinitialisierungsliste abgeleitet. Es ist nun erforderlich, sowohl den Arraytyp als auch die Initialisierungsliste anzugeben. Weitere Informationen finden Sie unter Wichtige Änderungen im Visual C++ 2005-Compiler.

Beispiel

Im folgenden Beispiel wird C3104 generiert.

// 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{};

Im folgenden Beispiel wird C3104 generiert.

// 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 {};

Im folgenden Beispiel wird C3104 generiert.

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

[ attribute(Class) ]
public __gc class AnotherAttr {
public:
   AnotherAttr(Object* arr __gc[]) : var0(arr) {}
   Object* var1 __gc[];
   Object* var0 __gc[];
};

[ AnotherAttr( { __box(3.14159), S"pi" }, var1 = { S"a", S"b" } ) ]   // C3104
public __gc class Class1 {};

// OK
[ AnotherAttr( new Object * __gc[] {__box(3.14159), S"pi" }, var1 = new Object * __gc[] { S"a", S"b" } ) ]
public __gc class Class2 {};