Max*_*ola 1 c++ arduino include-guards esp8266 platformio
由于错误,我需要在我的头文件和 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
主程序
#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);
Run Code Online (Sandbox Code Playgroud)
错误
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
Run Code Online (Sandbox Code Playgroud)
正如 walnut 在评论中所指出的,第一个问题#ifdef应该是#ifndef. 现在这个指令永远不能被评估true(因为这个宏没有在任何地方定义)。
此外,您永远不应该在您的cpp文件中放置包含守卫。顾名思义,您可以使用它们来保护包含在其他文件中的文件,并且cpp永远不应将文件包含在任何地方。
现在,在您的cpp文件中包含保护,会发生以下情况:
ifndef遇到,它是true(LED_HANDLER_H尚未定义)LED_HANDLER_H 被定义为#include指令的作用。这是将文件内容简单地复制并粘贴到另一个文件中。#ifdef LED_HANDLER_H从内部LedHandler.h检查,它是false(这个宏已经在步骤 3 中定义了)LedHandler.h由于包含守卫,跳过了全部内容。| 归档时间: |
|
| 查看次数: |
840 次 |
| 最近记录: |