我的 main.cpp 包含头文件 setup.h
setup.h 从文件中读取数据,然后在 main.cpp 中使用。
在 setup.h 读取的数据文件中,一个数据是一个浮点变量,我需要在 main.cpp中的一个函数(来自另一个头文件)中使用。
我在头文件中定义变量时不能使用extern,因为我无法用文件中的数据初始化它(编译时出错):
setup.h
...
extern float G = 0;
input >> G;
...
的main.cpp
...
float G;
instance function(G);
...
如何在 main.cpp 文件中获取初始化变量?
答案 0 :(得分:4)
在标题中,您应该声明变量,以便编译器知道它存在于某处:
extern float G;
在其中一个编译单元(cpp)中,您必须定义变量。然后你可以将其初始化:
float G = 0.0;
不要滥用全局变量; - )
答案 1 :(得分:1)
当您使用#include
- 指令包含文件时,您可以认为所包含文件的内容直接插入#include
- 语句的位置。
这意味着头文件的内容不是自己编译的,而是在包含它的翻译单元的过程中(以及在包含它的地方的上下文中)。
所以你的代码可能会导致......
extern float G = 0;
input >> G;
float G;
然后有几个问题。
首先,变量G
定义了两次;请注意,extern
和初始化程序不仅仅是声明,而是实际定义变量(尽管extern
- 关键字)。
其次,语句input >> G
可能在文件范围内使用,不允许使用(此类代码必须放在函数内)。
所以你唯一能做的就是......
<强> setup.h 强>
extern float G; // no initialisation here
<强> setup.cpp 强>
float init() {
float dummy;
cin >> dummy;
return dummy;
}
float G = init(); // definition and initialization through a function
<强>的main.cpp 强>
#include "setup.h"
int main() {
cout << G; // use of (initialized, externally defined) G
}