C++/CLI处理CLR兼容——如何创建无参数List

作为一名.Net开发,如果有一天编译器突然告诉你,你必须要为每一个list的构造函数传入参数,不能使用foreach处理数列。你会不会抓狂?


来分享下我踩到的坑

在这里插入图片描述

在这里插入图片描述

然而c++/cli是.NET兼容语言,语法自然是支持list或者foreach的使用的。所以事实上这里的语法完全没有任何问题,而且是可以通过编译的,就如同下图。

在这里插入图片描述

那么是什么造成这些错误提示了呢?

既然语法没有问题,那么原因就可能集中在编译器上了。

那会不会是IDE的设置问题呢?

尝试了多个vs版本以及c++编译器版本,这个错误提示都会出现。

这样一来问题就应该在项目配置上,即我们的.vcxproj上面的设置

最终在找到了ItemDefinitionGroup->ClCompile->ConformanceMode这个设置

在这里插入图片描述

这个设置,是指标准C++兼容模式。

我们知道由于历史原因,c++存在多个版本,vc++和ISO的c++存在一定的语法差异。

这个选项就是告诉编译器,只能按照标准c++的语法进行编译,任何vc++特有的c++语法都不能通过。

那么,对于c++/cli来说,是.NET兼容语言,自然和标准c++的语法差异更大了。

所以我们将这一项改为false就能编译通过了。

当然在项目的属性页,也可以通过配置属性->C/C+±>语言->符合模式,找到这个选项

在这里插入图片描述

不过对于vs创建的C++的CLR项目这个属性默认是false的。

因此,出现这个情况很可能是该项目从vc++项目改动过来导致的

参考链接:


本文会经常更新,请阅读个人博客原文: https://xinyuehtx.github.io/ ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名黄腾霄(包含链接: https://xinyuehtx.github.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系

发布了100 篇原创文章 · 获赞 2 · 访问量 3914

猜你喜欢

转载自blog.csdn.net/htxhtx123/article/details/104423108