前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2019-10-14-C++/CLI居然不能创建无参数list

2019-10-14-C++/CLI居然不能创建无参数list

作者头像
黄腾霄
发布2020-06-10 14:36:23
3510
发布2020-06-10 14:36:23
举报
文章被收录于专栏:黄腾霄的博客黄腾霄的博客

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


来分享下我踩到的坑

1571120993580
1571120993580
1571121036671
1571121036671

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

1571121163700
1571121163700

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

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

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

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

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

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

1571121596884
1571121596884

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

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

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

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

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

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

1571123394958
1571123394958

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

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

参考链接:


本文会经常更新,请阅读原文: https://xinyuehtx.github.io/post/C++CLI%E5%B1%85%E7%84%B6%E4%B8%8D%E8%83%BD%E5%88%9B%E5%BB%BA%E6%97%A0%E5%8F%82%E6%95%B0list.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档