Ich schaue eine Video-Serie auf youtube von Jason Tuner und auf diesem bestimmten Video hier gefunden: Aggregate Initializations er beginnt mit clang ++ C++ 03 und ändert dann Compiler zu clang ++ C++ 11 dann wann Er integriert die Basisklassenhierarchie, zu der er sie ändert, indem er C++ 17 oder C++ 1z verwendet, wobei er einen neuen Build von clang ++ verwendet.C++ 17 Aggregat-Initialisierungen
Ich habe gerade MSVS2017RC heruntergeladen und installiert und ich laufe Windows 7 64bit SP1 auf einem Intel Quad Core Extreme.
aber wenn ich versuche, sein Video zu folgen, während dies in meinem IDE mit
struct B {
double q;
};
struct S : B {
int i;
float f;
};
int main() {
S s{ {}, 1, 2.3f };
return s.f;
}
ich diesen Compiler-Fehler bekommen:
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 Hat 2017 haben die Unterstützung dieser Funktionen, die sind in C++ 17 gefunden? Wenn ja, gibt es spezielle Compiler-Optionen, die in den Projekteigenschaften festgelegt werden müssen? Oder ist das derzeit exklusiv für clang oder gcc? Was ist der Hauptgrund für MS Compiler Fehler C2440
, wenn dies ein C++ 17 Compiler sein soll?
Okay, danke für die Klarstellung. Ich habe auf der MSDN-Seite gesehen, dass Aggregat in Ordnung ist, aber nicht mit einer Basisklasse oder Vererbung, aber die cppreference-Website zeigt ähnliche Syntax-Unterstützung wie in der oben erwähnten Video-Serie. –
@FrancisCugler: Die Cppreference Seite sagt nicht, dass VS2017 das tun wird. In der Tat sagt es genau das Gegenteil. Unter "Aggregat-Initialisierung von Klassen mit Basisklassen" hat Visual Studio ein großes, rotes Leerzeichen. –
Ich glaube, du hast mich falsch verstanden; Ich wollte nicht explizit sagen, dass cppreference angibt, dass es von VS2017 unterstützt wird; Ich habe nur gesagt, dass es gültige Syntax für C++ 17 ist. Auch nach dem Betrachten der Liste in dem von Ihnen bereitgestellten Link; Es scheint, dass die MS hinter der Kurve zurückbleibt. –