2015-03-31 49 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));