需求
在做C++工程时, 通常需要建立多个cpp文件, 但是在一个cpp文件中定义的全局变量又需要在另外一个文件使用, 则会碰到当前的问题.
方法
注: 本方法适用VC++环境
解决办法
(1) 在另外的需要使用该全局变量的文件中声明extern
全局变量
比如有两个文件, globalVariable.cpp
和Derive.cpp
globalVariable.cpp
#include <iostream>
using namespace std;
int g_var = 233;
void print_global_variable();
int main(int argc, char *argv[])
{
cout << "original print: " << g_var << endl;
print_global_variable();
g_var += 1;
cout << "after function: " << g_var << endl;
return 0;
}
Derive.cpp
#include <iostream>
using namespace std;
extern int g_var; // 此处声明外部全局变量, 即可使用其他文件定义的全局变量
void print_global_variable() {
g_var += 1;
cout << "print function: " << g_var << endl;
}
效果
original print: 233
print function: 234
after function: 235
(2) 建立头文件, 在头文件中声明extern变量, 然后在单个cpp文件中定义, 并且都include该头文件即可 (但是注意不能多次定义, 否则链接报错
global_incl.h
extern int g_var;
void print_global_variable1();
void print_global_variable2();
void print_global_variable3();
globalVariable.cpp
#include <iostream>
#include "global_incl.h"
using namespace std;
int g_var = 233;
int main(int argc, char *argv[])
{
cout << "original print: " << g_var << endl;
print_global_variable1();
g_var += 1;
cout << "after function1: " << g_var << endl;
print_global_variable2();
g_var += 1;
cout << "after function2 " << g_var << endl;
print_global_variable3();
g_var += 1;
cout << "after funtion3: " << g_var << endl;
return 0;
}
Derive.cpp
#include <iostream>
#include "global_incl.h"
using namespace std;
void print_global_variable1() {
g_var += 1;
cout << "print function1: " << g_var << endl;
}
Derive2.cpp
#include <iostream>
#include "global_incl.h"
using namespace std;
void print_global_variable2() {
g_var += 2;
cout << "print function2: " << g_var << endl;
}
Derive3.cpp
#include <iostream>
#include "global_incl.h"
using namespace std;
void print_global_variable3() {
g_var += 3;
cout << "print function3: " << g_var << endl;
}
五个文件在同一目录下, 效果
original print: 233
print function1: 234
after function1: 235
print function2: 237
after function2 238
print function3: 241
after funtion3: 242