C++ 如何在单独的config.h文件中声明全局变量
我在VScode中编译时遇到了问题,而不是在Visual Studio中 我在项目的include文件夹中有一个头文件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。但是
config.h
。请注意,我在platformio.ini中添加了build\u flags=-I include
。在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文件来定义变量吗?我想尽量保持模块化。