全局声明的变量的C ++多定义错误

时间:2018-07-12 11:02:24

标签: c++ include global-variables multiple-definition-error

尊敬的StackOverflowers,

我正在学习编码面向对象的C ++。对于一个项目,我正在使用Arduino内核编程esp32。我遇到了一些我真的不明白的链接错误。已经有很多类似的问题,但是它们并没有帮助我解决我的问题。

我有必须全局声明的ISR函数。我已经将这些函数放在global.h和global.cpp文件中。这些功能所需的变量在.h文件中声明,并在.cpp文件中定义。为了防止事物被编译两次,我将其放在了它周围:

#ifndef GLOBAL_H
#define GLOBAL_H

#endif

代码可以很好地编译,但是当链接过程开始时,我收到一条错误消息:

.pioenvs\nodemcu-32s\src\ULAM.cpp.o:(.bss.buttonState+0x0): first defined here
.pioenvs\nodemcu-32s\src\global.cpp.o:(.bss.oldButtonState+0x0): multiple definition of `oldButtonState'
.pioenvs\nodemcu-32s\src\ULAM.cpp.o:(.bss.oldButtonState+0x0): first defined here
.pioenvs\nodemcu-32s\src\global.cpp.o:(.bss.oldEncPos+0x0): multiple definition of `oldEncPos'
.pioenvs\nodemcu-32s\src\ULAM.cpp.o:(.bss.oldEncPos+0x0): first defined here
.pioenvs\nodemcu-32s\src\main.cpp.o:(.bss.oldButtonState+0x0): multiple definition of `oldButtonState'
.pioenvs\nodemcu-32s\src\ULAM.cpp.o:(.bss.oldButtonState+0x0): first defined here
.pioenvs\nodemcu-32s\src\main.cpp.o:(.bss.oldEncPos+0x0): multiple definition of `oldEncPos'
.pioenvs\nodemcu-32s\src\ULAM.cpp.o:(.bss.oldEncPos+0x0): first defined here
.pioenvs\nodemcu-32s\src\main.cpp.o:(.bss.buttonState+0x0): multiple definition of `buttonState'
.pioenvs\nodemcu-32s\src\ULAM.cpp.o:(.bss.buttonState+0x0): first defined here
.pioenvs\nodemcu-32s\src\main.cpp.o:(.bss.encoderPos+0x0): multiple definition of `encoderPos'
.pioenvs\nodemcu-32s\src\ULAM.cpp.o:(.bss.encoderPos+0x0): first defined here
.pioenvs\nodemcu-32s\src\main.cpp.o:(.bss.bFlag+0x0): multiple definition of `bFlag'
.pioenvs\nodemcu-32s\src\ULAM.cpp.o:(.bss.bFlag+0x0): first defined here
.pioenvs\nodemcu-32s\src\main.cpp.o:(.bss.aFlag+0x0): multiple definition of `aFlag'
.pioenvs\nodemcu-32s\src\ULAM.cpp.o:(.bss.aFlag+0x0): first defined here
.pioenvs\nodemcu-32s\src\main.cpp.o:(.data.mux+0x0): multiple definition of `mux'
.pioenvs\nodemcu-32s\src\ULAM.cpp.o:(.data.mux+0x0): first defined here

某些错误表明ULAM.cppp和global.cpp之间存在多个定义,而其他错误则表明ULAM.cpp和main.cpp之间存在多个定义。凭着我对编译和链接过程的了解,它必须以结构化我的#include的方式做些事情。

in main.cpp I have:
#include <Arduino.h>
#include "ULAM.h"

in ULAM.h I have:
#include <Arduino.h>
#include <Adafruit_MAX31856.h>
#include <SPI.h>
#include <PID_v1.h>
#include "../include/defines.h"
#include "global.h"
#include "ulamProgram.h"

in ULAM.cpp:
#include "ULAM.h"

in global.h:
#include <Arduino.h>
#include "../include/defines.h"

and in global.cpp:
#include "global.h"

有人知道这里出了什么问题吗?

0 个答案:

没有答案