全局变量作为默认参数
Global variable as default argument
//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();
}
相关文章:
- 使函数参数默认为周围范围
- 如何将值传递给其参数(默认参数)
- 当“std::make_index_sequence”和“std::index_sequence”用于模板参数默认类型时
- C ,构造器中允许的参考参数默认值
- 哪些规则控制参数默认赋值?
- 错误:上一个规范后给出的参数默认参数
- 是否可以设计一个包含模板参数默认值的类
- 构造函数中参数C++默认值
- 如何设置依赖于其他参数的参数默认值
- C++模板参数默认函数实现
- QInput对话框参数默认值
- g++4.8.2上列表方法参数默认初始化时出错
- 在函数定义中指定参数默认值会导致错误 C2143:语法错误:'='之前缺少')'
- 函数模板:将第一个模板参数默认为第二个
- 模板模板参数默认可以引用其他模板类型的参数
- 参数默认为先例参数的值
- 如何修改一个类,使它只有一个成员函数,所有参数默认
- 内置类型的模板参数默认值
- 是否可以使用构造函数或对象作为其他类方法的参数默认值?
- 模板参数默认为更高版本