【问题标题】:How can I make the scope of an object created in setup() global?如何使 setup() 中创建的对象的范围成为全局的?
【发布时间】:2019-11-19 02:25:04
【问题描述】:

我使用 File/Examples/Adafruit MQTT Library/mqtt_ESP8266 示例作为我的代码模型。在示例中,mqtt 对象被创建为全局变量,一切正常。但是,我需要在 setup() 中创建 mqtt 对象,因为直到那时才知道构造函数参数。如果我移动构造函数调用

Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);

从全局命名空间到 setup() 内部,我无法再从 loop() 内部看到 mqtt 变量。

我尝试在全局命名空间中声明一个指向 mqtt 的指针,但不知道如何将其更改为指向 setup 中创建的 mqtt 对象()。我该怎么做?

大卫

【问题讨论】:

    标签: arduino mqtt arduino-esp8266


    【解决方案1】:

    它的工作方式与标准 C++ 相同。您可以在全局范围内声明一个指针,然后在其他范围内使用new 运算符在您希望的任何位置动态创建对象。

    Adafruit_MQTT_Client *mqtt;
    
    void setup() {
        mqtt = new Adafruit_MQTT_Client(&client, ...);
    }
    

    请记住使用箭头运算符 (->) 而不是标准点 (.) 以指针形式访问实例的成员:

    void loop() {
        // check connection, other stuff, etc...
        mqtt->sendPacket(...);
    }
    

    有关完整示例(不过使用 Adafruit 的另一个库),请参阅 Adafruit_NeoPixel/examples/simple_new_operator/simple_new_operator.ino

    【讨论】:

      猜你喜欢
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-12
      • 2018-10-29
      • 1970-01-01
      • 2020-02-26
      相关资源
      最近更新 更多