2017-06-19 289 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中,因爲您傳遞2個參數(2個數組文字)而不是1個嵌套數組,所以會引發錯誤,因此添加一對{}使得您的參數爲{{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中沒有這樣的構造函數。另一方面,你可以寫map _({{23,1345},{43,-8745}}) –