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

时间:2017-05-09 18:15:34

标签: c++ class c++11 shared stdmap

我正在尝试制作一篇如本文标题所示的地图,将某些低音类与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;
}

2 个答案:

答案 0 :(得分:3)

鉴于您已声明结构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> ();

答案 1 :(得分:0)

您错过了 Loop each line in CSV Build Key from account/company Try to get data from Map If Data not found Create new data with Key and put key -> data mapping in map add name and rep to data Loop values in map Output to CSV 的包含,可能会导致出现此错误消息。