我正在使用文件/示例/ 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
它的工作方式与标准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
。