Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.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++ 如何在单独的config.h文件中声明全局变量_C++_Global Variables - Fatal编程技术网

C++ 如何在单独的config.h文件中声明全局变量

C++ 如何在单独的config.h文件中声明全局变量,c++,global-variables,C++,Global Variables,我在VScode中编译时遇到了问题,而不是在Visual Studio中 我在项目的include文件夹中有一个头文件config.h。请注意,我在platformio.ini中添加了build\u flags=-I include。在config.h中,我需要为我需要的一些特定数量的全局变量做一些声明。其他一切都是用指针等来完成的 我的问题有两方面 在config.h中声明变量时,例如int myVar,我得到一个多重声明错误。为什么? 我可以将变量声明为extern int myVar。但是

我在VScode中编译时遇到了问题,而不是在Visual Studio中

我在项目的include文件夹中有一个头文件
config.h
。请注意,我在platformio.ini中添加了
build\u flags=-I include
。在
config.h
中,我需要为我需要的一些特定数量的全局变量做一些声明。其他一切都是用指针等来完成的

我的问题有两方面

  • 在config.h中声明变量时,例如
    int myVar
    ,我得到一个多重声明错误。为什么?
  • 我可以将变量声明为
    extern int myVar
    。但是我需要在.cpp文件中重新声明变量myVar,比如main.cpp。这最好怎么做

  • 最后,我如何在头中声明一个全局变量,将该头包含在其他几个文件中,然后全局使用该变量?(这主要是为了创建队列和信号量)

    如果只需要全局常量,请参阅。假设您需要一个可变的全局变量,有两个选项。在这两种情况下,我们的全局变量只有一个实例

    经典解决方案:
    extern
    //头文件
    外部队列;
    
    这里,我们简单地说,
    queue
    是在其他一些源文件中定义的

    //源文件
    MyQueue队列{1,2,3};
    
    然后,我们在源文件中定义它。 也看到

    C++17解决方案:
    inline
    //头文件(不需要源文件)
    内联MyQueue队列{1,2,3};
    

    函数的作用与变量的作用相同。它放松了变量的一个定义规则(ODR),允许我们在多个位置定义它。这样,当在多个源文件中包含头文件时,我们不会得到任何链接器错误。

    使用
    extern int myVar
    选项。是的,您必须在所有.cpp文件中重新定义
    myVar
    ;您需要在.cpp文件中定义它。一个声明说“某个地方有一个变量具有这个名称和类型”。定义是“这是一个具有此名称和类型的变量”。一个变量可以有任意多的声明;您只能有一个定义。谢谢您的回复。为了简单起见,我应该创建一个附带的config.cpp文件来定义变量吗?我想尽量保持模块化。