Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在多个文件中包含相同的头文件-';变量';未在此范围中声明_C++_Arduino_Platformio - Fatal编程技术网

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>