7

ここから取得したコードをコンパイルしようとしています

// constructing unordered_maps
#include <iostream>
#include <string>
#include <unordered_map>

typedef std::unordered_map<std::string,std::string> stringmap;

stringmap merge (stringmap a,stringmap b) {
  stringmap temp(a); temp.insert(b.begin(),b.end()); return temp;
}

int main ()
{
  stringmap first;                              // empty
  stringmap second ( {{"apple","red"},{"lemon","yellow"}} );       // init list
  stringmap third ( {{"orange","orange"},{"strawberry","red"}} );  // init list
  stringmap fourth (second);                    // copy
  stringmap fifth (merge(third,fourth));        // move
  stringmap sixth (fifth.begin(),fifth.end());  // range

  std::cout << "sixth contains:";
  for (auto& x: sixth) std::cout << " " << x.first << ":" << x.second;
  std::cout << std::endl;

  return 0;
}

MSVC2012を使用していますが、受信しています

エラー C2143: 構文エラー: '{' の前に ')' がありません

コード行で

stringmap second ( {{"apple","red"},{"lemon","yellow"}} );       // init list

何か不足していますか?

4

3 に答える 3

6

Visual Studio 2012 には、最新の C++ 機能の多くが欠けていますinitialiser lists。概要はこちらをご覧ください。

于 2013-04-02T14:08:14.680 に答える
4

コードに問題はなく、GCC と Clang で正常にコンパイルされます。問題は Visual C++ にあります。

初期化リストは、Visual Studio 2012 Update 2で利用できる機能の 1 つです。これは、現在、Visual Studio 2012 でこの機能を使用できないことを意味します。一連のCommunity Tech Previews (CTP)がありますが、IntelliSense サポートの欠如や非常に明確な免責事項など、いくつかの小さな問題があります。生産コード。

要するに、あなたのコードは正しいですが、Microsoft が Visual Studio 2012 Update 2 をリリースするまで、VS2012 ではコンパイルされません。 (Update 1) は 2012 年 11 月にリリースされました。それ以来、この件に関するニュースはほとんどありませんでしたが、昨年末から「近日公開」されています。

Update Now、Update 2がリリースされました。ただし、 Update 2 CTP で約束された C++ の改善は含まていません。これは、Update 2 で予定されているもののプレビューであることを考えると、面白いことです。どうやら、Visual C++ チームは「現在、これらの機能のリリース計画を最終調整中」であり、「すぐに詳細を共有する予定です」( Update 2 リリース告知コメントより)

于 2013-04-02T14:58:35.723 に答える