我正在尝试制作一篇如本文标题所示的地图,将某些低音类与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;
}
答案 0 :(得分:3)
鉴于您已声明结构Foo
和Bar
,如下所示:
struct Foo {};
struct Bar : Foo {};
std::make_shared
的正确语法使std::shared_ptr<Foo>
指向Bar
个实例:
std::shared_ptr<Foo> sp = std::make_shared<Bar>();
从第一个示例开始,Foo
为sensors
,Bar
为sensor1
。所以你的代码不应该是:
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
的包含,可能会导致出现此错误消息。