2017-06-19 32 views
3

私は非常に些細な問題である可能性のある解決策を見つけようとしています。クラス初期化子リストのconst unordered_mapを初期化したいと思います。しかし、私はまだコンパイラ(GCC 6.2.0)が受け入れる構文を見つけるべきではありません。コードリンクはhereです。初期化子リストでunordered_mapを初期化する

#include <unordered_map> 

class test { 
public: 
    test() 
     : map_({23, 1345}, {43, -8745}) {} 

private: 
    const std::unordered_map<long, long> map_; 
}; 

エラー:

main.cpp: In constructor 'test::test()': 
main.cpp:6:36: error: no matching function for call to 'std::unordered_map<long int, long int>::unordered_map(<brace-enclosed initializer list>, <brace-enclosed initializer list>)' 
    : map_({23, 1345}, {43, -8745}) {} 
           ^

は、初期化子リストで初期化することはできない複雑な定数でありますか?または、構文が異なる必要がありますか?

+0

使用すると、括弧の代わりにブレース。 –

+0

Vladに追加するには、1つのネストされた配列の代わりに2つの引数(2つの配列リテラル)を渡すのでエラーが発生します。したがって、{}の余分なペアを追加すると、{{23、1345}、{43、 - 8745}} 'これはあなたが望むものかもしれません。 –

+0

@ VladfromMoscow良いキャッチ、ありがとう。私はそれを逃した。 – ilya1725

答えて

3

使用して括弧の代わりにブレース

class test { 
public: 
    test() 
     : map_{{23, 1345}, {43, -8745}} {} 

private: 
    const std::unordered_map<long, long> map_; 
}; 
+0

かっこの代わりに中かっこがあるのはなぜですか? – 0x499602D2

+1

@ 0x499602D2クラスstd :: unordered_mapにそのようなコンストラクタが存在しないためです。一方、マップ_({23、1345}、{43、-8745}})を書くことができます –

関連する問題