在C++中正确使用多文件和全局变量的方法

假设有这样一段程序:

#include <iostream>
using namespace std;

int a = 12;	// 全局变量

void func(int x) {
  cout << x + a << endl;
}

int main() {
  int b = 10;
  func(b);
}

现在希望将func函数单独写为一个文件,并将a定义为全局变量。

先展示一种错误的做法:

// globalVariable.h
#pragma once
int a = 12;	// 声明并定义全局变量
void func(int x);


// func.cpp
#include <iostream>
#include "globalVariable.h"
using namespace std;

void func(int x) {
  cout << x + a << endl;
}


// main.cpp
#include <iostream>
#include "globalVariable.h"
using namespace std;

int main() {
  int b = 10;
  func(b);
}

这样会出现编译错误,提示出现了重复定义


编译报错:重复定义

出现错误的原因是:globalVariable.h中进行了全局变量的声明定义(注意区分二者的区别),而func.cpp和main.cpp中都包含了globalVariable.h,即出现了重复定义

那么我们只需要在globalVariable.h中利用extern进行进行声明,而在func.cpp中进行定义即可。

完整的程序如下:

// globalVariable.h
#pragma once
extern int a;	// 全局变量的声明,且要使用extern关键字
void func(int x);


// func.cpp
#include <iostream>
#include "globalVariable.h"
using namespace std;

int a = 12;	//全局变量的定义

void func(int x) {
  cout << x + a << endl;
}


// main.cpp
#include <iostream>
#include "globalVariable.h"
using namespace std;

int main() {
  int b = 10;
  func(b);
}

运行结果为22

发布了11 篇原创文章 · 获赞 1 · 访问量 1239

猜你喜欢

转载自blog.csdn.net/szzheng/article/details/104764981