2017-06-19 20 views
3

Ich versuche eine Lösung zu finden, was ein sehr triviales Problem sein könnte. Ich möchte meine const unordered_map in der Klasseninitialisierungsliste initialisieren. Allerdings muss ich noch die Syntax finden, die der Compiler (GCC 6.2.0) akzeptiert. Ein Code-Link ist here.Initialisiere unordered_map in der Initialisierungsliste

#include <unordered_map> 

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

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

Fehler:

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}) {} 
           ^

sind die komplexen Konstanten nicht erlaubt, in der Initialisierungsliste initialisiert werden? Oder die Syntax muss anders sein?

+0

Verwendung anstelle der Klammern Zahnspange. –

+0

Um Vlad hinzuzufügen, wird der Fehler ausgelöst, weil Sie 2 Argumente (2 Array-Literale) anstelle von 1 verschachtelten Array übergeben, also fügt ein zusätzliches Paar von {} Ihr Argument '{{23, 1345}, {43, - 8745}} was vielleicht sein mag. –

+0

@VladfromMoscow guten Fang, danke. Ich habe es verpasst. – ilya1725

Antwort

3

Verwenden Zahnspange anstelle der Klammern

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

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

Warum die Klammern anstelle von Klammern? – 0x499602D2

+1

@ 0x499602D2 Weil es keinen solchen Konstruktor in der Klasse std :: unordered_map gibt. Auf der anderen Seite könnten Sie map _ schreiben ({{23, 1345}, {43, -8745}}) –

Verwandte Themen