嗨 imy 项目可以识别不存在 2 次的变量的双重定义。我想通过更改我的代码并重新编译它的一些方法会卡住。
LedMatrix7219.cpp.o:(.data.Alphaletter+0x0): `Alphaletter'的多重定义 LedController.cpp.o:(.data.Alphaletter+0x0): 这里先定义
LedMatrix7219.cpp.o:In function 'loop' LedController.cpp.o:(.bss.arr+0x0): 首先定义在这里
LedMatrix7219.cpp.o:In function 'loop' LedController.cpp.o:(.data.Alphaletter2+0x0): 首先定义在这里
collect2.exe*:error: ld 返回 1 个退出状态
我有一个类 LedController 和一个标题 LettersDefinition.h
所有的标题都是这样开始的:
我包含一个结构和一个从 LetterDefinition.h 到 LedController 的枚举,因此在标题中我需要包含 LetterDefinition.h 以进行一定的打击。
#ifndef __LEDCONTROLLER_H__
#define __LEDCONTROLLER_H__
#include <Arduino.h>
#include "LettersDefinition.h"
LetterStruct finalText;
String theText="Test";
void test();
//it does some extra staff
#endif //__LEDCONTROLLER_H__
以及字母定义的标题。
#ifndef LETTERSDEFINITION_H_
#define LETTERSDEFINITION_H_
#include "arduino.h"
#include <avr/pgmspace.h>
struct LetterStruct{
lettersEnum name;
uint8_t size;
uint8_t columnSize[5];
uint8_t data[18];
}Alphaletter;
#endif /* LETTERSDEFINITION_H_ */
从我的主 .ide 文件中,我调用 Ledcontroller 的测试函数,得到你在上面看到的错误。测试函数只是检查 LetterStruct.name 变量而已。
我的 .ide 是这样的:
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
#include "LedController.h"
LedController controller;
void setup()
{
//irrelevant inits
}
void loop()
{
controller.test();
delay(2000);
}
如果我从 LedController.h 中删除 #include "LettersDefinition.h",则此错误将其定位为一个错误,即 LetterStruct 未在 LedController.h 中定义,这是正常的,因为我必须添加 LettersDefinition.h 才能被定义。