我遇到了在VS代码中编译而不是在Visual Studio中编译的问题。
我在项目的include文件夹中有一个头文件config.h
。请注意,我已经将build_flags = -I include
添加到platformio.ini中。在config.h
中,我需要为所需的选定数量的全局变量进行一些声明。其他一切都是用指针等完成的。
我的问题有两个方面。
- 当在config.h中声明一个变量(例如
int myVar
(时,我会得到一个多重声明错误。为什么 - 我可以将变量声明为
extern int myVar
。但是,我需要在.cpp文件中重新声明变量myVar,比如main.cpp。如何最好地做到这一点
最终,如何在标头中声明全局变量,将该标头包含在其他几个文件中,然后全局使用该变量?(这主要是为了创建队列和信号量(
如果您只想要全局常量,请参阅在C++中定义全局常量。假设您需要一个可变的全局变量,有两种选择。无论哪种情况,我们的全局变量都只有一个实例。
经典解决方案:extern
// header file
extern MyQueue queue;
这里,我们简单地说queue
是在其他源文件中定义的。
// source file
MyQueue queue{1, 2, 3};
然后,我们在源文件中定义它。另请参阅外部链接上的cppreference
C++17解决方案:inline
// header file (no source file needed)
inline MyQueue queue{1, 2, 3};
inline
对函数的作用与对变量的作用相同。它放宽了变量的一个定义规则(ODR(,允许我们在多个位置定义它。这样,当在多个源文件中包含头时,我们不会得到任何链接器错误。