5

我正在 VC2010 中编写一个托管 DLL(即为 VC++ DLL 项目启用了 /CLR)。以下代码无法编译:

System::Collections::Generic::List<int>^ my_list;
for each(auto elem in my_list)
{

}

它引发错误C3539:“auto”:模板参数不能是包含“auto”的类型。

我不明白原因。我尝试在 VS2012 中编译相同的内容,它会引发相同的错误(这不是适当的错误)。

为什么编译器无法推断出集合的类型?相同类型的代码可以在带有var关键字的 C# 中工作。

4

1 回答 1

1

首先,评论中最重要的一点:

提供的代码确实在 VS2013 c++/cli dll .net 4.5 中编译(Zee,2014-05-03)

当您编译C++/CLI时,它是 C++ 的 .NET 绑定,您使用的是 Microsoft 编译器的不同功能集。某事是否有效

  • 何时/clr生效
  • 或者,另外,当您使用“托管”构造时(如在您的代码中)

如果“正常”、本机、MSVC 编译器接受它,则与它无关。

至于“为什么”:看起来auto类型推导对 VS2010 和 VS2012 中的托管句柄​​类型不起作用,但是根据 Zee 的评论,它已在 VS2013 中实现。(快速搜索引擎检查没有找到任何官方声明。这个,所以我可能错了。)

于 2014-06-19T08:22:25.843 回答