无法在 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;
}
鉴于您已声明结构 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> ();
您缺少 <map>
的包含,它可能会导致此错误消息。
我正在尝试制作一张地图,如标题所示 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;
}
鉴于您已声明结构 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> ();
您缺少 <map>
的包含,它可能会导致此错误消息。