c++ - Arduino 库 : multiple definitions of a global var

标签 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 的目的而言,从 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/

相关文章:

c++ - 流式文件增量编码/解码

c++ - 为什么带有指针子对象的文字类类型的constexpr表达式不能是非类型模板参数

javascript - 带有 Node.js 的 Arduino 无法工作

c++ - C/C++ 双指针解引用问题

c++ - 初始化 std::complex

C++ 为什么我的文件在我重新启动程序时被截断?

c - Arduino 上的交互式交通灯

c++ - 为 Arduino 开发的 Xcode

swift - 如何使用 Swift 注册物联网设备

java - Arduino-处理 Serial.send/Serial.get 交互