在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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值