Visual c++ 使用';自动';针对每种原因C3539-为什么?
我正在VC2010中编写一个托管DLL(即为VC++DLL项目启用/CLR)。以下代码无法编译:Visual c++ 使用';自动';针对每种原因C3539-为什么?,visual-c++,foreach,c++-cli,auto,Visual C++,Foreach,C++ Cli,Auto,我正在VC2010中编写一个托管DLL(即为VC++DLL项目启用/CLR)。以下代码无法编译: System::Collections::Generic::List<int>^ my_list; for each(auto elem in my_list) { } System::Collections::Generic::List^my\u List; 对于每个(我的_列表中的自动元素) { } 它引发错误:“auto”:模板参数不能是包含“auto”的类型 我不明白原因。
System::Collections::Generic::List<int>^ my_list;
for each(auto elem in my_list)
{
}
System::Collections::Generic::List^my\u List;
对于每个(我的_列表中的自动元素)
{
}
它引发错误:“auto”:模板参数不能是包含“auto”的类型
我不明白原因。我尝试在VS2012中编译相同的代码,但它会引发相同的错误(这是不合适的错误)
为什么编译器无法推断colleciton的类型?同样类型的代码在C#中也可以使用
var
关键字。首先,注释中最重要的一点:
提供的代码在VS2013 c++/cli dll.net 4.5(,2014-05-03)中编译 < >编译时,它是C++的.NET绑定,您使用的是微软编译器的不同特性集。有些东西是否有效
- 当
生效时/clr
- 或者,另外,当您使用“托管”构造时(如在代码中)
至于“为什么”:似乎在VS2010和VS2012中,
auto
类型推断对托管句柄类型不起作用,但根据Zee的评论,随后已在VS2013中实现。(快速搜索引擎检查没有发现任何官方声明。这可能是错误的。)c#!=C++、C++CLI与最近的C++特性如Auto+LAMBDAS不太好。提出的C++代码在VS2013 C++/CLI DLL.NET 4.5中编译。