如何使在setup()中创建的对象的作用域全局化?

我正在使用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 的指针,但是不知道如何更改它以指向在安装程序中创建的 mqtt 对象()。我该怎么办?

大卫

jiangxue2913 回答:如何使在setup()中创建的对象的作用域全局化?

它的工作方式与标准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

本文链接:https://www.f2er.com/3076737.html

大家都在问