私はJason Tunerのビデオシリーズを見ていて、この特定のビデオはAggregate Initializationsです。彼はclang ++ C++ 03を使い始めてから、コンパイラをclang ++ C++ 11に変更します彼はclang ++の最近のビルドを使用して、C++ 17またはC++ 1zを使用して基本クラス階層を組み込みます。C++ 17集計初期設定
MSVS2017RCをダウンロードしてインストールしましたが、Intel Quad Core Extreme上で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で見つかったのですか?もしそうなら、プロジェクトプロパティに設定する必要のある特別なコンパイラオプションがありますか?またはこれは現在clangまたはgccに排他的ですか?これがC++ 17コンパイラであると思われる場合、MSのコンパイラエラーC2440
の主な理由は何ですか?
説明していただきありがとうございます。私はMSDNのページで、集約は大丈夫だとは言いますが、基本クラスや継承ではないと言っていますが、cppreferenceウェブサイトは上記のビデオシリーズに見られるのと同様の構文サポートを示しています。 –
@FrancisCugler:Cppreferenceページは、VS2017がそれを行うと言っていません。実際、それはまったく反対です。 「基本クラスを持つクラスの集計初期化」では、Visual Studioには大きな赤いスペースがあります。 –
私はあなたが私を誤解したと思います。私は、cppreferenceがVS2017によってサポートされていると明示的に言っているわけではありませんでした。私はそれがC++のための有効な構文であることだけを述べていた17。また、あなたが提供したリンクのリストを見た後。 MSは曲線の向こうに落ち始めているようだ。 –