我知道这已被多次询问,但找不到与此特定问题相关的帖子:
# 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的目的而言,extern
来自config.h的变量并没有多大意义。怎么解决这个问题?
答案 0 :(得分:1)
您将在头文件中声明变量:
String g_ssid;
和在cpp文件中定义:
String g_ssid = "";
这样,可以多次包含标题而无需重新定义变量。
有关声明和定义之间区别的详细信息,请参阅this SO question。