无法在 std::map<std::string,std::shared_ptr<class>> 中设置值

Can't set values in an std::map<std::string,std::shared_ptr<class>>

我正在尝试制作一张地图,如标题所示 post 到 link 某些低音 类 到 MQTT 主题标题。

我已经开始使用原始(c 风格)指针,但正如我在学校学到的那样,智能指针将是更好的设计选择。

实例化地图时没有出现问题,但是当我要为其分配数据时出现问题

我让它完美运行的方法是:

std::map<std::string,sensors*> factory;
factory["sensorTwo"]= new sensor1;

在这段代码中"sensors"是sensor1的基类;

当我尝试这样做时:

std::map<std::string,std::shared_ptr<sensors>> factory;
factory["sensorOne"]= std::make_shared<sensors> (sensor1);

编译器要求在“;”之前输入主表达式在第二行。 第一个示例中的赋值显然不适用于 shared_ptr,但是有人知道如何执行此操作吗?

主要内容如下:

#include <string>
#include <memory>
#include <map>

#include "sensors.h"
#include "sensor1.h"
#include "sensor2.h"


int main()
{
    //std::map<std::string,sensors*> factory;

    std::map<std::string,std::shared_ptr<sensors>> factory;
    factory["sensorOne"]= std::make_shared<sensor1> ();
    return 0;
}

鉴于您已声明结构 FooBar 如下:

struct Foo {};
struct Bar : Foo {};

std::make_shared 使 std::shared_ptr<Foo> 指向 Bar 实例的正确语法是:

std::shared_ptr<Foo> sp = std::make_shared<Bar>();

根据您的第一个示例,FoosensorsBarsensor1。所以你的代码不应该是:

factory["sensorOne"]= std::make_shared<sensors> (sensor1);

但是:

factory["sensorOne"]= std::make_shared<sensor1> ();

您缺少 <map> 的包含,它可能会导致此错误消息。