2012-09-29 18 views
24

可能性の重複:
C++11 features in Visual Studio 2012Visual Studio 2012でイニシャライザのリストがベクターで動作しない?

だから私はWikipediaを経由して、今日C++ 11の初期化子リスト上に読み、C++ 11が標準コンテナには、次の構文をサポートしていることを見ました。 :

std::vector<std::string> v = { "xyzzy", "plugh", "abracadabra" }; 
std::vector<std::string> v({ "xyzzy", "plugh", "abracadabra" }); 
std::vector<std::string> v{ "xyzzy", "plugh", "abracadabra" }; 

Visual Studio 2012で次のように試してみると、コンパイルエラーここ

は私のコードです:

#include <vector> 

using namespace std; 

int main() { 
    vector<string> vecs = {"h", "g", "e"}; 
} 

VS2012は、初期化子リストをサポートしていないか、私はちょうど何かを誤解していますか?

ありがとうございます!

+15

しかし、あまりにもレイアウトされていないMSDNの記事を読んでいるよりもはるかに速かったです。私は次回には投稿してはいけないと思う。 – Polaris878

+3

私はPolarisに同意します。 MSDNは私を怒らせる。 – Marlon

答えて

38

Visual Studio 2012はイニシャライザリストをサポートしていません。

さて、2012年11月のCTPまではありませんでした。今は、少なくともアルファ状態です。確かに、このコードはイニシャライザリストを標準ライブラリ自体に入れているので、まだ動作しません。

+2

Nicolさん、ありがとうございます。VS2012がサポートしている機能のリストについては、かなり良い表があります:http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx – Polaris878

+1

しかし、サポートは残念です。 'int main(){for(int i:{1、2、3、4、5}){}}'は内部コンパイラエラーを返します。実際には、プレCTP 1がクラッシュする。 CTPには、イニシャライザリストのbegin/end関数がありません。 – dascandy

+0

@dascandy:はい。これは、イニシャライザリストのための標準的なライブラリサポートの欠如の一部です:std :: beginとstd :: endに対する適切なオーバーロードを持たず、遠隔ベースの 'for 'は依存しています。 –

関連する問題