如何将头文件中的初始化变量导出到C ++中的main.cpp文件?

时间:2017-11-21 22:41:28

标签: c++ header extern

我的 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 文件中获取初始化变量?

2 个答案:

答案 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
}