在函数内部声明全局对象



假设有以下代码初始化Arduino板上的LCD显示屏:

#include <LiquidCrystal.h>
void LCDInit(){
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
}
void LCDPrint(String data){
lcd.print(data);
}

当我调用LCDInit()时,它将初始化连接到Arduino的LCD显示器。

如果我尝试在一个单独的函数(例如LCDPrint())中打印一些文本到LCD上,它将不起作用,因为lcd对象在一个单独的函数LCDInit()中声明。

我的问题是如何使lcd对象全局,以便在单独的函数中引用它将起作用?

在Python中使用global关键字可以很容易地做到这一点,那么在c++中如何做到呢?
#include <LiquidCrystal.h>
#include <memory>
std::unique_ptr<LiquidCrystal> lcd;
void LCDInit(){
lcd = std::make_unique<LiquidCrystal>(12, 11, 5, 4, 3, 2);
lcd->begin(16, 2);
lcd->setCursor(0, 0);
}
void LCDPrint(String data){
lcd->print(data);
}

:如果你不能使用std::unique_ptr,那么就手动使用new/delete,例如:

#include <LiquidCrystal.h>
LiquidCrystal* lcd = nullptr;
void LCDInit(){
lcd = new LiquidCrystal(12, 11, 5, 4, 3, 2);
lcd->begin(16, 2);
lcd->setCursor(0, 0);
}
void LCDCleanup(){
delete lcd; lcd = nullptr;
}
void LCDPrint(String data){
lcd->print(data);
}

最新更新