解决C++重定义问题--匿名命名空间

今天遇到一个命名空间重定义的问题,程序框架大体如下:
在这里插入图片描述
interface中定义的是一个namespace, 形式如下:

namespade np {
    int a = 1;
    int b = 2;
};

并且三个module(1,2,3),以及core模块全都需要引用这个命名空间中的数据(与消息传递有关),并且这几个模块是分别编译的,最后链接起来,编译module1, module2, module3, core时没有问题, 但是在链接时由于重复包含了interface.h头文件,其中的命名空间中的成员出现了重复定义的问题,这个命名空间默认是external链接属性的,所以各模块对该命名空间成员的引用出现重定义。
解决方案也很简单:用匿名命名空间把这个重定义的命名空间包起来即可,效果如下:

namespace {
  namespace np1 {
  	int a =1;
  	int b = 2;
  };
};

原理:
匿名的命名空间具有internal链接属性(同static), 只能在本文件中访问(其他文件也访问不了,因为不知道命名空间的名字下面的UNIQUE),本文件是知道匿名空间的名字的(默认添加&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值