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

2022-02-26 00:00:00 global-variables c++ extern

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

print.h

#ifndef PRINT_H_
#define PRINT_H_

void Print();

#endif

print.cpp

#include "print.h"

#include <iostream>

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

Soure.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(), '
');
    std::cin.get();

    return 0;
}

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

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

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


解决方案

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

您可能要做的是

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

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

int g_x = 5;

相关文章