我知道这个问题已被多次询问,但找不到与此特定问题相关的帖子:
# config.h
String g_ssid = "";
# webserver.cpp
#include "config.h"
bool saveConfig(String *ssid, String *pass)
{
// Open config file for writing.
File configFile = SPIFFS.open("/cl_conf.txt", "w");
if (!configFile)
{
Serial.println("Failed to open cl_conf.txt for writing");
return false;
}
// Save SSID and PSK.
configFile.println(*ssid);
configFile.println(*pass);
configFile.close(); // <-- error in this line???
return true;
} // saveConfig
编译错误:
webserver.cpp.o: In function `saveConfig(String*, String*)':
C:\Users\AppData\Local\Temp\build9148105163386366718.tmp/webserver.cpp:114: multiple definition of `g_pass'
声明为内联是不可能的,因为编译器会提示:
'g_ssid' declared as an 'inline' variable
显然,就 config.h 的目的而言,从 config.h 中extern
变量没有多大意义。如何解决?
最佳答案
您将声明头文件中的变量:
String g_ssid;
并在 cpp 文件中定义它:
String g_ssid = "";
这样,可以多次包含 header 而无需重新定义变量。
参见 this SO question有关声明和定义之间的区别的更多详细信息。
关于c++ - Arduino 库 : multiple definitions of a global var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33696787/