c++ - 在 C++ 中,如何使用在其他地方的一个文件中定义的常量变量?
问题描述
我是 C++ 初学者。
// a.cpp 诠释 g_x{ 1 }; // 该链接默认为外部链接 extern const int g_y{ 2 }; // 将变量 g_y 的链接从 intern-linkage 更改为 extern-linkage
//main.cpp
#include <iostream>
extern int g_x; // forward declaration
extern const int g_y; // forward declaration
int main() {
std::cout << "The value of g_x is " << g_x << '\n';
std::cout << "The value of g_y is " << g_y << '\n';
return 0;
}
输出:
g_x 的值:1
g_y 的值:492240950
什么是“492240950”?
我想在执行以下 cli 时输出 g_y:
>> g++ main.cpp a.cpp --std=c++14
我应该改进什么?
我的道歉,回答者!
我犯了一个错误的源代码,所以我修改它。
在 a.cpp 中:extern const g_y{ 2 } ---> extern const int g_y{ 2 };
我还没有解决上面的问题。
虽然我再说一遍,但我的愿望输出如下:
g_x 的值:1
g_y 的值:2
我希望我缺乏与常量变量属性相关的知识
本期进展
我删除extern
了 a.cpp 中的关键字,但我还没有解决问题。
它的输出不是g_y的值,还是9位连续数。
资源
链接:https ://www.learncpp.com/cpp-tutorial/external-linkage/
由于我想在控制台中显示 g_y 的值,所以我添加了它的输出实现。
解决方案
不能在声明变量的地方初始化变量extern
。的全部意义extern
在于告诉编译器该符号是在别处定义的。
如果a.cpp
提供这些变量,那么它应该像这样定义它们:
int g_x = 1;
const int g_y = 2;
extern
当链接器查找在 中声明的这些符号时main.cpp
,它将从编译的目标文件中查找a.cpp
.
如果变量在另一个源文件中也被定义为非外部变量,那么链接器将给出一个错误,告诉您有多个定义。
对于任何公开全局变量的源文件来说,通常的做法是提供一个头文件,其中这些变量被声明为 extern。因此,例如,您将有一个a.h
包含extern
声明的标题,main.cpp
并将其包含在内。
推荐阅读
- ubuntu - 在树莓派 4(ubuntu 19.10)上安装 bazel 时出现问题
- jenkins - 传递 Jenkins 参数以运行量角器脚本时遇到问题
- flutter-desktop - flutter桌面,如何监控文件
- python - 在 tensorflow 模型中关闭 softmax
- openshift - 在 openshift 中部署没有持久存储的 hashcorp vault
- python - 运行命令“conda env create -f environment.yml”后出现警告
- sql - SQL Server 2017 更新临时表时不验证用户函数
- jenkins - 从另一个阶段重复调用一个阶段
- systemd - 基于 systemd 文本的控制台年表
- python - 我想用从文件中读取的值构建一个数组......我该怎么做?