类未使用标头保护命名类型

问题描述 投票:0回答:1

由于错误,我需要在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 &currentState;
    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
c++ arduino esp8266 include-guards platformio
1个回答
1
投票

[正如胡桃木在评论中指出的那样,第一个问题是#ifdef应该为#ifndef。现在,此指令永远无法评估为true(因为此宏未在任何地方定义)。

而且,您永远都不应在cpp文件中加入包含防护。顾名思义,您可以使用它们来保护其他文件中包含的文件,并且cpp文件永远不应包含在任何位置。

现在,在cpp文件中包含include防护,将发生以下情况:

  1. 从上至下读取代码
  2. 遇到[ifndef,它是trueLED_HANDLER_H尚未定义)]
  3. LED_HANDLER_H被定义
  4. 包括其他标题
  5. “ Handlers / LedHandler.h”已包含现在,#include指令的作用很重要。这是将文件内容简单复制并粘贴到另一个文件中。
  6. #ifdef LED_HANDLER_H内部的[LedHandler.h已检查,并且为false(此宏已在步骤3中定义)]
  7. LedHandler.h的全部内容由于包含保护而被跳过。
© www.soinside.com 2019 - 2024. All rights reserved.