【问题标题】:Storing references in a map在地图中存储参考
【发布时间】:2015-03-31 08:10:00
【问题描述】:

我尝试将 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()’

我到底做错了什么?

【问题讨论】:

  • std::reference_wrapper 没有默认构造函数

标签: c++ reference stdmap


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 2011-02-16
    • 2016-10-17
    • 2019-12-18
    • 2023-03-18
    相关资源
    最近更新 更多