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

  1. Wenn die eckigen Klammern Teil eines Attributblocks sind:

    1. Stellen Sie ein oder mehrere Attribute im Attributblock bereit.

    2. Entfernen Sie den Attributblock.

  2. Wenn die eckigen Klammern Teil eines Lambda-Ausdrucks sind:

    1. 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 {}();
}

Siehe auch

Referenz

Lambda Expressions in C++

Lambda Expression Syntax

Weitere Ressourcen

Attribut