【问题标题】:Meyers' implementation of a Singleton Attempting to reference a deleted function (paho-mqttpp3 library) (mqtt::async_client class)Meyers 实现的单例尝试引用已删除的函数(paho-mqttpp3 库)(mqtt::async_client 类)
【发布时间】:2021-12-04 02:55:13
【问题描述】:

操作系统:Windows 10 x64
构建工具:Visual Studio 2021
语言标准:C++20
paho-mqttpp3:1.2.0
包管理器:vcpkg

我正在尝试使用 paho-mqttpp3 版本 1.2.0 构建一个 mqtt::async_client

我正在为我的 MQTT 客户端使用 Meyers 的 Singleton 实现。参考 : https://stackoverflow.com/a/17713799/6319901

我收到以下错误

错误 C2280 'MqttClient::MqttClient(void)': 试图引用一个 删除功能

在线static MqttClient instance;

当我将鼠标悬停在实例(对象)上时,工具提示会显示以下错误。

Error (active) E1790 “MqttClient”的默认构造函数不能 引用——是一个被删除的函数

来源:

MqttClient& MqttClient::get_instance(void)
{
     static MqttClient       instance;
     return instance;
}

标题:

class MqttClient : public virtual mqtt::callback
{
private:
    mqtt::async_client                  client;
    void                                connected(const std::string& cause) override;
    void                                connection_lost(const std::string& cause) override;
    void                                delivery_complete(mqtt::delivery_token_ptr tok) override;
    void                                message_arrived(mqtt::const_message_ptr msg) override;
    MqttClient() = default;
    ~MqttClient() = default;
public:
    static MqttClient&                  get_instance(void);
    MqttClient(const MqttClient& obj) = delete;
    MqttClient(MqttClient&& obj) = delete;
    MqttClient& operator=(const MqttClient& obj) = delete;
    MqttClient& operator=(MqttClient&& obj) = delete;
};

【问题讨论】:

  • 我的猜测是,要么你没有覆盖所有 mqtt::callback 的虚函数(我对 mqtt 一无所知),要么不能默认构造 mqtt::async_client。

标签: c++


【解决方案1】:

documentation 看来,mqtt:async_client 不是默认可构造的,这意味着您必须在MqttClient 的构造函数中提供初始化程序或默认成员初始化程序。不这样做会导致默认构造函数被删除,尽管您尝试显式默认它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    相关资源
    最近更新 更多