2015-03-31 31 views
8

Tôi đã cố gắng lưu trữ một đối tượng foo vào một std::reference_wrapper, nhưng tôi kết thúc với lỗi trình biên dịch mà tôi không hiểu.Lưu trữ tài liệu tham khảo trong một bản đồ

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

Các lỗi biên dịch là khá dài, nhưng nó nắm này:

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

chính xác tôi làm gì sai?

+0

std :: reference_wrapper không có constructor mặc định –

Trả lời

6

std::reference_wrapper không được định cấu hình mặc định (nếu không nó sẽ là một con trỏ).

my_map[0] 

tạo ra, nếu 0 chưa được một chìa khóa trên bản đồ, một đối tượng mới của các loại ánh xạ, và cho điều này loại ánh xạ cần một constructor mặc định. Nếu loại ánh xạ của bạn không được mặc định-constructible, sử dụng insert():

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

hoặc emplace():

my_map.emplace(0, std::ref(a)); 
Các vấn đề liên quan