Compilerfehler C3409
Ein leerer Attributblock ist nicht erlaubt
Die eckigen Klammern wurden vom Compiler als Attributblock interpretiert, es wurden jedoch keine Attribute gefunden.
Der Compiler generiert diesen Fehler möglicherweise, wenn Sie eckige Klammern als Teil der Definition eines Lambda-Ausdrucks verwenden. Dieser Fehler tritt auf, wenn der Compiler nicht bestimmen kann, ob die eckigen Klammern Teil der Definition eines Lambda-Ausdrucks oder eines Attributblocks sind. Weitere Informationen zu Lambdaausdrücken finden Sie unter Lambda Expressions in C++.
So beheben Sie diesen Fehler
Wenn die eckigen Klammern Teil eines Attributblocks sind:
Stellen Sie ein oder mehrere Attribute im Attributblock bereit.
Entfernen Sie den Attributblock.
Wenn die eckigen Klammern Teil eines Lambda-Ausdrucks sind:
Stellen Sie sicher, dass der Lambda-Ausdruck gültigen Syntaxregeln folgt.
Weitere Informationen zur Lambda-Ausdruckssyntax finden Sie unter Lambda Expression Syntax.
Beispiel
Im folgenden Beispiel wird C3409 generiert.
// C3409.cpp
// compile with: /c
#include <windows.h>
[] // C3409
class a {};
// OK
[object, uuid("00000000-0000-0000-0000-000000000000")]
__interface x {};
[coclass, uuid("00000000-0000-0000-0000-000000000001")]
class b : public x {};
Im folgenden Beispiel wird C3409 generiert, da ein Lambda-Ausdruck die mutable-Spezifikation verwendet, aber keine Parameterliste bereitstellt. Der Compiler kann nicht bestimmen, ob die eckigen Klammern Teil der Definition eines Lambda-Ausdrucks oder eines Attributblocks sind.
// C3409b.cpp
int main()
{
[] mutable {}();
}