c++ - 如何在多个 .cpp 文件中使用全局变量?

标签 c++ global-variables extern

我有一个简单的程序,它试图在一个单独的文件中打印我的全局变量。我正在使用 Visual Studio 2013 专业版 IDE。

打印.h

#ifndef PRINT_H_
#define PRINT_H_

void Print();

#endif

打印.cpp

#include "print.h"

#include <iostream>

void Print()
{
    std::cout << g_x << '\n';
}

源.cpp

#include <iostream>
#include <limits>

#include "print.h"

extern int g_x = 5;

int main()
{
    Print();

    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    std::cin.get();

    return 0;
}

我收到编译器错误 error C2065: 'g_x' : undeclared identifier

我搜索过这个论坛,但找不到其他人遇到我的问题。我尝试在单独的 .cpp 文件中重新声明我的全局变量但没有成功。如您所见,我包含了必要的 header 保护并为我的全局变量分配了 extern 关键字。这是我第一次在多个文件中测试全局变量。显然我错过了一些简单的东西。我需要更改或添加什么才能使我的程序运行?

编辑: 我找到了这个 topic有助于理解 extern 和全局变量定义之间的区别。

最佳答案

编译器正在编译print.cpp。它在编译 print.cpp 时对 source.cpp 一无所知。因此,当 print.cpp 被编译时,你放在 source.cpp 中的 g_x 绝对没有用,这就是你得到错误的原因.

你可能想要做的是

1) 将 extern int g_x; 放在 print.h 中。那么编译器在编译print.cpp的时候就会看到g_x

2) 在source.cpp中,从g_x的声明中移除extern:

int g_x = 5;

关于c++ - 如何在多个 .cpp 文件中使用全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30514789/

相关文章:

c++ - 从类中提供指向私有(private)成员的指针

JavaScript 全局变量的替代方案

java - 我需要让整个 Java 程序都可以访问一个变量

java - 如何从主类访问监听器中定义的变量?

c++ - 在 C++ 中使用 extern "C"时我到底失去了什么?

c++ - 与其他语言相比,如何衡量 C 的 SNMP 性能?

c++ - 当调用 QTcpSocket::close() 时会发生什么?

c - 在多个文件中使用结构

c++ - 如何在 Vala 中使用 C++ 库

c++ - 将 C/C++ dll 头文件转换为 Delphi 的最佳资源?