C++使用名称空间中声明的变量代替外部全局变量的一种方法

1.在不使用名称空间的情况下,为了避免出现链接错误,应该使用以下方法处理全局变量:

在a.h中:

extern int x;    //全局变量的声明

在a.cpp中:

#include "a.h"
int x = 0;    //全局变量的定义

则在包含了a.h的b.cpp中,可以直接使用该变量:

#include "a.h"
cout << x;

在声明extern变量之后一定要对变量进行定义,并且定义和声明的作用域要相同,否则也会导致链接出错。

2.然而,在使用名称空间的情况下,C++有“使用名称空间中声明的变量代替外部全局变量”的指导原则,对此只需要将不使用名称空间的写法的代码包含在某个名称空间中即可,具体写法如下:

 在a.h中:

namespace XSpace
{
    extern int x;    //全局变量的声明
}

在a.cpp中:

#include "a.h"
namespace XSpace
{
    int x = 0;    //全局变量的定义
}

则在包含了a.h的b.cpp中,可以通过该名称空间使用该变量:

#include "a.h"
using namespace XSpace;
cout << x;

可以发现,使用名称空间的情况下定义和声明的作用域也应相同(即在该名称空间内),而b.cpp在获得XSpace许可之前也无法使用变量x,体现了该指导原则的保护作用。

(部分内容参考:extern修饰全局变量正确用法和链接错误的解决方法_用extern声明变量链接不到-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值