gpt4 book ai didi

c++ - 无法在 std::map> 中设置值

转载 作者:行者123 更新时间:2023-11-27 23:54:11 29 4
gpt4 key购买 nike

我正尝试制作一张如本文标题所示的 map ,以将某些低音类链接到 MQTT 主题标题。

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

问题不是在实例化 map 时出现,而是在我要为其分配数据时出现。

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

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> ();

关于c++ - 无法在 std::map<std::string,std::shared_ptr<class>> 中设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43877112/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com