由于错误,我需要在Header文件和Cpp中实现头保护,因为在不知道出了什么问题之前我从未使用过它,因为在某些类上它可以工作,而在某些类上却不能。最初问题更大,但我认为我将问题的范围缩小了。
LedHandler.h
#ifdef LED_HANDLER_H
#define LED_HANDLER_H
#include <Arduino.h>
#include <Adafruit_NeoPixel.h>
#include <FastLED.h>
/* #include "Led/LedFunction.h"
#include "Led/LedStates.h"
#include "Led/Fading.h" */
class LedHandler {
public:
LedHandler(int length, uint16_t pin);
void clear();
void show();
void setColor(int s, int r, int g, int b);
Adafruit_NeoPixel getStrip();
int getLength();
private:
/* LedStates ¤tState;
LedStates &targetState;
Fader<LedStates> &ledFader; */
int length;
Adafruit_NeoPixel strip;
CRGB* leds;
};
#endif
LedHandler.cpp
#ifdef LED_HANDLER_H
#define LED_HANDLER_H
#include <Adafruit_NeoPixel.h>
#include <FastLED.h
#include "Handlers/LedHandler.h"
LedHandler::LedHandler(int length, uint16_t pin) {
...
}
...
#endif
main.cpp
#define FASTLED_ESP8266_NODEMCU_PIN_ORDER
#include <Arduino.h>
#include <Scheduler.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include "Tasks/WifiTask.h"
//#include "Tasks/Networking/UDPTask.h"
//#include "Handlers/GsonHandler.h"
#include "Handlers/LedHandler.h"
LedHandler ledHandler(60, D6);
错误
src\main.cpp:14:1: error: 'LedHandler' does not name a type
LedHandler ledHandler(60, D6);
^
*** [.pio\build\nodemcuv2\src\main.cpp.o] Error 1
[正如胡桃木在评论中指出的那样,第一个问题是#ifdef
应该为#ifndef
。现在,此指令永远无法评估为true
(因为此宏未在任何地方定义)。
而且,您永远都不应在cpp
文件中加入包含防护。顾名思义,您可以使用它们来保护其他文件中包含的文件,并且cpp
文件永远不应包含在任何位置。
现在,在cpp
文件中包含include防护,将发生以下情况:
ifndef
,它是true
(LED_HANDLER_H
尚未定义)]LED_HANDLER_H
被定义#include
指令的作用很重要。这是将文件内容简单复制并粘贴到另一个文件中。#ifdef LED_HANDLER_H
内部的[LedHandler.h
已检查,并且为false
(此宏已在步骤3中定义)]LedHandler.h
的全部内容由于包含保护而被跳过。