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

How to use global variables in multiple .cpp files?

本文关键字:全局变量 文件 cpp      更新时间:2023-10-16

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

打印.h

#ifndef PRINT_H_
#define PRINT_H_
void Print();
#endif

print.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文件中重新声明我的全局变量,但没有成功。正如您所看到的,我已经包含了必要的头保护,并为我的全局变量分配了extern关键字。这是我第一次在多个文件中测试全局变量。很明显,我错过了一些简单的东西。我需要更改或添加什么才能使程序正常工作?

编辑:我发现这个主题有助于理解外部变量和全局变量定义之间的区别。

编译器正在编译print.cpp。它在编译print.cpp时对source.cpp一无所知。因此,当编译print.cpp时,您在source.cpp中放置的g_x对您没有任何好处,这就是为什么会出现错误的原因。

你可能想做的是

1( 将CCD_ 8放置在CCD_。然后编译器在编译print.cpp时会看到g_x

2( 在source.cpp中,从g_x:的声明中删除extern

int g_x = 5;

将全局声明移动到公共标头,如common.h:

#ifndef COMMON_H_
#define COMMON_H_
extern int g_x;   //tells the compiler that g_x exists somewhere
#endif

print.cpp

#include <iostream>
#include "print.h"
#include "common.h"
void Print()
{
    std::cout << g_x << 'n';
}

源.cpp

#include <iostream>
#include <limits>
#include "print.h"
#include "common.h"
int g_x;
int main()
{
    g_x = 5;   //initialize global var
    Print();
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
    std::cin.get();
    return 0;
}

在其他.cpp文件中,您可以访问g_x,包括common.h标头。

extern int g_x;

属于.h,并且您需要添加

int g_x =5; 

到一些.cpp.