2015-03-31 48 views
8

我试图将foo对象存储到std::reference_wrapper中,但是最终出现了我不明白的编译器错误。在地图中存储引用

#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); 
} 

编译器错误是相当漫长的,但它归结为:

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

我究竟在做什么错?

+0

的std ::的reference_wrapper没有默认构造函数 – 2015-03-31 08:14:08

回答

6

std::reference_wrapper不是默认构造的(否则它将是一个指针)。

my_map[0] 

造成的,如果0是不是已经在地图上的一个关键,映射类型的新对象,并为此映射类型需要一个默认的构造函数。如果您的映射类型不是默认-构造,可使用insert()

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

emplace()

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