C++ 在多个文件中包含相同的头文件-';变量';未在此范围中声明
关于以下代码,我有一个问题(这些只是片段,不是完整的文件): 菜单C++ 在多个文件中包含相同的头文件-';变量';未在此范围中声明,c++,arduino,platformio,C++,Arduino,Platformio,关于以下代码,我有一个问题(这些只是片段,不是完整的文件): 菜单 #ifndef MENU_H #define MENU_H #include <Adafruit_SSD1306.h> #include <stdint.h> #include <Config.h> class MenuHeader; // forward declaration of class MenuHeader class MenuPage; // forward declara
#ifndef MENU_H
#define MENU_H
#include <Adafruit_SSD1306.h>
#include <stdint.h>
#include <Config.h>
class MenuHeader; // forward declaration of class MenuHeader
class MenuPage; // forward declaration of class MenuPage
class Menu {
MenuHeader* m_header{nullptr};
MenuPage* m_pages[16]{}; // support up to 16 pages
uint8_t m_pagesCount{0};
uint8_t m_currentPage{0};
public:
void setHeader(MenuHeader* header);
void addPage(MenuPage* page);
void goToPage(const char* pageName);
void next();
void prev();
void click();
void draw(Adafruit_SSD1306* display);
};
#endif
所有关于Menu.cpp文件的内容。
我认为,如果我在其中一个头文件中包含Config.h文件,然后将其包含在Main.cpp中,它应该可以工作。即使我直接在Main.cpp中包含config,也会出现相同的错误。我能做些什么
编辑:
嗯,奇怪的事情正在发生。如果我在Menu.h中有#include
,config只在该文件中起作用。如果我将其更改为#include“./Config/Config.h”
,它在Menu.h和Menu.cpp中都可以工作。发生什么事?
使用
是platformio的特色。它会自动查找并编译所有库。这看起来不正确:
#include <Config.h>
检查包含路径的查看位置:
查看两组路径中是否有另一个“Config.h”
另请注意:
这看起来也是错误的:
#include <stdint.h>
发现了一个问题。事实证明,配置可能是保留名称,这就是为什么它不起作用。将名称更改为CFG修复了该问题。谢谢您的时间。为什么要用
constexpr
而不是const
来获取简单的常量值?两种方法都试过了。两者都不起作用。我只是认为constexpr在我的情况下可能更好。我猜-其他一些头已经定义了CONIFG_H,try CONFIG___有@pm100指出,这里可能有名称空间冲突。由于现在是2018年,您可能还需要检查编译器是否支持这些#ifndef
废话。如果扩展不理解自20世纪70年代以来的“…”
风格,那么它听起来要么是配置错误,要么是超级崩溃。是正确的,我使用PlatformIO扩展为我编译libs。感谢您指出cstdintWas的问题,它是另一个名为“Config.h”的文件还是已经定义的宏“Config_h”?它们都没有。我没有任何名为Config.h的文件,我曾经将所有ifndefs都更改为Pragma。只有更改名称才有帮助。因此,在其中一个包含目录中包含了另一个“Config.h”文件,而不是您的头文件。现在刚刚检查了它。你说得对。esp8266库有一个Config.h文件。我没有注意到,因为lib不在我的工作目录中。虽然我不知道为什么有时候它会起作用,但我看到了我的答案。使用“”而不是在其中一个系统包含目录中包含文件的本地版本。
'HEADER_HEIGHT' was not declared in this scope
identifier "HEADER_HEIGHT" is undefined
'SCREEN_Y_OFFSET' was not declared in this scope
identifier "SCREEN_Y_OFFSET" is undefined
#include <Config.h>
#include "Config.h" // Note the quotes rather than the < >
#include <stdint.h>
#include <cstdint>