全局变量作为默认参数

时间:2017-12-11 10:05:55

标签: c++ include

//header.h
void foo(int a = some_global_variable);

//file1.cpp
int some_global_variable = 2;
void foo(int a){}

//file2.cpp
#include "header.h"
foo();

我在编译some_global_variable未声明的标识符(header.h)时遇到错误, 这是有道理的,因为在some_global_variable中定义了file1.cpp。有没有办法实现这个目标?

编辑:我在extern some_global_variable中尝试header.h。编译器没有抱怨。这是正确的方法吗?

2 个答案:

答案 0 :(得分:0)

编译器需要知道some_global_variable在遇到它作为默认参数时的存在(但值。)

为此,使用extern 工作。然后它的定义可以驻留在不同的编译单元中。

答案 1 :(得分:0)

你可能想要这个:

<强> header.h

extern int some_global_variable;   // <<<<<<<<<<<<< add this line
void foo(int a = some_global_variable);

如果添加extern int some_global_variable;,编译器会知道某处有一个名为some_global_variable的变量,否则它不会知道some_global_variable是什么。

<强> file1.cpp

int some_global_variable = 2;
void foo(int a) {}

<强> file2.cpp

int main()
{
  foo();
}