【发布时间】:2017-05-09 18:15:34
【问题描述】:
我正在尝试制作一个如本文标题所示的地图,以将某些低音类链接到 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;
}
【问题讨论】:
-
如果我们不知道您的三个
*.h文件中的内容,那么查看您的main并没有多大帮助。 -
MQTT 无法解释。要么没用(所以应该删除),或者需要解释。
-
Christian,这些文件几乎是空的,只是空类,其中编号的是传感器的派生类。 Yakk,这对解决方案并不重要,只是说明我为什么要这样的一个小背景。
-
@Xinq:如果它们几乎是空的,那么在没有它们的情况下创建 MCVE 应该会更容易,可能通过将
sensors类和#include <map>的定义直接移动到 @ 987654330@.
标签: c++ class c++11 shared stdmap