Arduino库:全局变量的多个定义

时间:2015-11-13 15:57:03

标签: c++ arduino

我知道这已被多次询问,但找不到与此特定问题相关的帖子:

# 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的变量并没有多大意义。怎么解决这个问题?

1 个答案:

答案 0 :(得分:1)

您将在头文件中声明变量:

String g_ssid;

在cpp文件中定义

String g_ssid = "";

这样,可以多次包含标题而无需重新定义变量。

有关声明和定义之间区别的详细信息,请参阅this SO question