gpt4 book ai didi

c++ - 类未使用 header 保护器命名类型

转载 作者:行者123 更新时间:2023-12-01 15:13:30 24 4
gpt4 key购买 nike

由于错误,我需要在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

最佳答案

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

另外,您永远都不应在cpp文件中放置包含防护。顾名思义,您可以使用它们来保护包含在其他文件中的文件,并且cpp文件绝对不应包含在任何地方。

现在,在您的cpp文件中使用include Guard时,将发生以下情况:

  • 从上至下读取代码
  • 遇到ifndef,它是true(尚未定义LED_HANDLER_H)
  • LED_HANDLER_H已定义
  • 包括其他 header
  • 包括
  • “Handlers / LedHandler.h”
    现在,#include指令的作用很重要。这是将文件内容简单复制并粘贴到另一个文件中的过程。
  • #ifdef LED_HANDLER_H内部检查
  • LedHandler.h,它是false(此宏已在步骤3中定义)
  • 由于包含保护,跳过了LedHandler.h的全部内容。
  • 关于c++ - 类未使用 header 保护器命名类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60085311/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com