如何使在setup()中创建的对象的作用域成为全局范围?

问题描述 投票:0回答:1

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

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

从全局名称空间到内部setup(),我再也看不到来自loop()内部的mqtt变量。

我已经尝试在全局名称空间中声明指向mqtt的指针,但是不知道如何更改它以指向在setup()中创建的mqtt对象。我该怎么办?

David

arduino mqtt arduino-esp8266
1个回答
0
投票

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

Adafruit_MQTT_Client *mqtt;

void setup() {
    mqtt = new Adafruit_MQTT_Client(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
}

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.