在 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);
}
假设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);
}