在 C++ 函数中声明全局对象

Declare Global Object Inside Function C++

假设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 显示器。

如果我尝试在一个单独的函数中将一些文本打印到 LCD 上(例如 LCDPrint()),它不会起作用,因为 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);
}

UPDATE:如果你不能使用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);
}