尊敬的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"
有人知道这里出了什么问题吗?