4
我在看youtube上的视频系列由Jason Tuner和在这里找到的这个特定视频:Aggregate Initializations他开始使用clang ++ C++ 03,然后将编译器更改为clang ++ C++ 11,然后当他将基类层次结构改为使用C++ 17或C++ 1z,使用最近构建的clang ++。C++ 17总结初始化
我刚刚下载并安装了MSVS2017RC,并且在Intel四核酷睿上运行Windows 7 64bit SP1。
然而,当我试图同时具有这在我的IDE
struct B {
double q;
};
struct S : B {
int i;
float f;
};
int main() {
S s{ {}, 1, 2.3f };
return s.f;
}
我得到这个编译器错误跟随他的视频:
1>------ Build started: Project: Test1z, Configuration: Debug Win32 ------
1>stdafx.cpp
1>Test1z.cpp
1>c:\users\skilz80\documents\visual studio 2017\projects\test1z\test1z\test1z.cpp(15): error C2440: 'initializing': cannot convert from 'initializer list' to 'S'
1>c:\users\skilz80\documents\visual studio 2017\projects\test1z\test1z\test1z.cpp(15): note: No constructor could take the source type, or constructor overload resolution was ambiguous
1>c:\users\skilz80\documents\visual studio 2017\projects\test1z\test1z\test1z.cpp(16): warning C4244: 'return': conversion from 'float' to 'int', possible loss of data
1>Done building project "Test1z.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
是否的Visual Studio 2017年具有这些功能的支持,在C++ 17中找到?如果是这样,那么需要在项目属性中设置特殊的编译器选项?或者,这是目前独家铿锵或海湾合作委员会? MS的编译器错误C2440
如果这应该是一个C++ 17编译器的主要原因是什么?
好的,谢谢你的澄清。我确实在MSDN页面上看到它确实表示聚合是可以的,但没有基类或继承,但cppreference网站确实显示了类似于上述视频系列中的语法支持。 –
@FrancisCugler:Cppreference页面没有说VS2017会这样做。事实上,它恰恰相反。在“使用基类对类进行聚合初始化”下,Visual Studio有一个很大的红色空间。 –
我想你误解了我;我并不是想明确地说cppreference是说它支持VS2017;我只是说它对于C++ 17来说是有效的语法。在查看您提供的链接中的列表之后,似乎MS开始落后于曲线。 –