首页 > 解决方案 > 标题中不允许使用全局变量?

问题描述

我正在尝试为我的 PlatformIO Arduino 项目使用单独的文件,但出现此错误:

.pio/build/uno/src/test.cpp.o (symbol from plugin): In function `value':
(.text+0x0): multiple definition of `value'
.pio/build/uno/src/main.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2: error: ld returned 1 exit status

对我来说,这个错误听起来就像你没有包含警卫或使用一次 pragma 时会遇到的错误,但它们并没有解决我的问题。

这是我的 main.cpp:

#include <Arduino.h>
#include "test.hpp"

void setup() {
  Serial.begin(115200);
  Serial.println(value);
}

void loop() {
}

测试.hpp:

#ifndef TEST_HPP
#define TEST_HPP

int value = 3;

#endif

test.cpp 只包含 test.hpp 并没有做任何其他事情。

标签: c++arduinoplatformio

解决方案


您的项目中似乎有两个源文件:main.cpptest.cpp. 两者都可能包括 test.hpp。所以现在每个源文件都独立地选择了一个value变量。所以链接器会感到困惑,因为它不知道value每个模块应该使用哪个。你可能不想要这个全局变量的多个实例。你只想要一个。

在 test.hpp 中执行此操作:

extern int value;

然后在 test.cpp 中:

int value = 3;

推荐阅读