全局变量作为默认参数

Global variable as default argument

本文关键字:参数 默认 全局变量      更新时间:2023-10-16
//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中定义的。有没有办法实现这一目标?

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

编译器需要知道some_global_variable的存在(但不是值),因为它作为默认参数。

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

你可能想要这个:

标题.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是什么。

文件1.cpp

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

文件2.cpp

int main()
{
foo();
}