编译器错误 C3498
“var”:无法捕获具有托管或 WinRT 类型的变量
无法在 lambda 中捕获具有托管类型或 Windows 运行时类型的变量。
更正此错误
- 将托管或 Windows 运行时变量传递到 lambda 表达式的参数列表。
示例
下面的示例将生成 C3498,因为 lambda 表达式的捕获列表中出现了具有托管类型的变量:
// C3498a.cpp
// compile with: /clr
using namespace System;
int main()
{
String ^ s = "Hello";
[&s](String ^ r)
{ return String::Concat(s, r); } (", World!"); // C3498
}
下面的示例通过将托管变量 s
传递到 lambda 表达式的参数列表,解决了 C3498:
// C3498b.cpp
// compile with: /clr
using namespace System;
int main()
{
String ^ s = "Hello";
[](String ^ s, String ^ r)
{ return String::Concat(s, r); } (s, ", World!");
}