编译器错误 C3409

不允许空特性块

注解

方括号由编译器解释为属性块,但没有找到任何属性。

使用方括号作为 lambda 表达式定义的一部分时,编译器可能会生成此错误。 当编译器无法确定方括号是 lambda 表达式的定义还是属性块的定义的一部分时,会发生此错误。 有关 lambda 表达式的详细信息,请参阅 Lambda 表达式

更正此错误

  1. 如果方括号是属性块的一部分:

    1. 在属性块中提供一个或多个属性。

    2. 请删除该属性块。

  2. 如果方括号是 lambda 表达式的一部分,请确保 lambda 表达式遵循有效的语法规则。

    若要详细了解 lambda 表达式语法,请参阅 lambda 表达式语法

示例

下面的示例生成 C3409。

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

下面的示例生成 C3409,因为 lambda 表达式使用 mutable 规范,但不提供参数列表。 当编译器无法确定方括号是 lambda 表达式的定义还是属性块的定义的一部分时,会发生此错误。

// C3409b.cpp

int main()
{
   [] mutable {}();
}

另请参阅

attribute
Lambda 表达式
Lambda 表达式语法