首页 > 解决方案 > 在 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 的值,所以我添加了它的输出实现。

标签: c++c++14

解决方案


不能在声明变量的地方初始化变量extern。的全部意义extern在于告诉编译器该符号是在别处定义的。

如果a.cpp提供这些变量,那么它应该像这样定义它们:

int g_x = 1;
const int g_y = 2;

extern当链接器查找在 中声明的这些符号时main.cpp,它将从编译的目标文件中查找a.cpp.

如果变量在另一个源文件中也被定义为非外部变量,那么链接器将给出一个错误,告诉您有多个定义。

对于任何公开全局变量的源文件来说,通常的做法是提供一个头文件,其中这些变量被声明为 extern。因此,例如,您将有一个a.h包含extern声明的标题,main.cpp并将其包含在内。


推荐阅读