c++ - 标题中不允许使用全局变量?
问题描述
我正在尝试为我的 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 并没有做任何其他事情。
解决方案
您的项目中似乎有两个源文件:main.cpp
和test.cpp
. 两者都可能包括 test.hpp。所以现在每个源文件都独立地选择了一个value
变量。所以链接器会感到困惑,因为它不知道value
每个模块应该使用哪个。你可能不想要这个全局变量的多个实例。你只想要一个。
在 test.hpp 中执行此操作:
extern int value;
然后在 test.cpp 中:
int value = 3;
推荐阅读
- angular - Angular7 FullCalendar 错误:无法读取未定义的属性“长度”
- git - 将 STS 项目从本地仓库推送到不同用户创建的远程仓库
- c - 中断处理程序行为怪异
- laravel - Laravel Illuminate\Database\Eloquent\Collection::createToken 不存在
- c++ - 当我使用 GUI 开发 QT 动态库时如何查看我的 QT UI?
- python-3.x - FileNotFoundError: [WinError 2] 系统找不到指定的文件:exiftool
- mysql - 更新表的替代方法
- symfony - Decorate all services that implement the same interface by default?
- python - 将 PIL 图像转换为 Tkinter 图像时出错
- c# - 即使在配置之后也无法在 Pagemodel 中使用会话