如何在多个 .cpp 文件中使用全局变量?
How to use global variables in multiple .cpp files?
我有这个简单的程序,它试图在一个单独的文件中打印我的全局变量。我使用的是 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 << '\n';
}
source.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 文件中尝试 re-declaring 我的全局变量但没有成功。如您所见,我已经包括了必要的 header 守卫并为我的全局变量分配了 extern 关键字。这是我第一次在多个文件中测试全局变量。显然我错过了一些简单的东西。我需要更改或添加什么才能使我的程序运行?
编辑: 我发现这个 topic 有助于理解 extern 和全局变量定义之间的区别。
extern int g_x;
属于.h,需要添加
int g_x =5;
一些.cpp。
将您的全局声明移至通用 header,例如 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';
}
source.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 header.
编译器正在编译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;
我有这个简单的程序,它试图在一个单独的文件中打印我的全局变量。我使用的是 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 << '\n';
}
source.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 文件中尝试 re-declaring 我的全局变量但没有成功。如您所见,我已经包括了必要的 header 守卫并为我的全局变量分配了 extern 关键字。这是我第一次在多个文件中测试全局变量。显然我错过了一些简单的东西。我需要更改或添加什么才能使我的程序运行?
编辑: 我发现这个 topic 有助于理解 extern 和全局变量定义之间的区别。
extern int g_x;
属于.h,需要添加
int g_x =5;
一些.cpp。
将您的全局声明移至通用 header,例如 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';
}
source.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 header.
编译器正在编译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;