2015-03-31 5 views
8

Ich habe versucht, ein foo Objekt in einem std::reference_wrapper zu speichern, aber ich am Ende mit einem Compiler-Fehler, den ich nicht verstehe.Speichern von Referenzen in einer Karte

#include <functional> 
#include <map> 

struct foo 
{ 
}; 

int main() 
{ 
    std::map< int, std::reference_wrapper<foo> > my_map; 
    foo a; 
    my_map[ 0 ] = std::ref(a); 
} 

Der Compiler-Fehler ist ziemlich lang, aber es läuft darauf hinaus, diese nach unten:

error: no matching function for call to ‘std::reference_wrapper<foo>::reference_wrapper()’ 

Was genau mache ich falsch?

+0

std :: reference_wrapper hat keinen Default-Konstruktor –

Antwort

6

std::reference_wrapper ist nicht default-constructible (andernfalls wäre es ein Zeiger).

my_map[0] 

erzeugt, wenn 0 nicht bereits ein Schlüssel in der Karte, ein neues Objekt der abgebildeten Art, und für diese die abgebildete Art benötigt einen Standard-Konstruktor. Wenn Ihr abgebildet Typ nicht-konstruierbar Standard verwenden insert():

my_map.insert(std::make_pair(0, std::ref(a))); 

oder emplace():

my_map.emplace(0, std::ref(a)); 
Verwandte Themen