C++命名空间与头文件的关系

C++命名空间与头文件的关系:


(一)添加一个头文件demonamespace.h,内容如下

#ifndef DEMONAMESPACE_H_

#define DEMONAMESPACE_H_

 

class A

{

public:

    int value;

};

 

namespace mynp

{

    A ma;

}

 

#endif /* DEMONAMESPACE_H_ */

 

 

(二)主文件:

 

代码(1):

//只添加了头文件

#include "demonamespace.h"

 

int main() {

//很显然接下来的语句存在错误,解决方法是(1)修改为mynp::ma.value=2;(2)添加命名空间//mynp,即加上一行代码using namespace mynp;(可使用缩写方式using mynp)

    ma.value=2;

    return 0;

}

编译报错提示:'ma' was not declared in this scope

 

代码(2):

//只添加了命名空间

using namespace mynp;

 

int main() {

    ma.value=2;       //很显然,头文件都没有指明,编译器不会知道mynp的来源

    return 0;

}

编译报错提示:

expected nested-name-specifier before 'mynp'

'mynp' has not been declared

'ma' was not declared in this scope

 

//若在主文件中添加一个命名空间mynp,则可以调用mynp中内容,但该mynp不是头文件demonamespace.h中的mynp:

namespace mynp

{

    int i;

}

 

using namespace mynp;

int main() {

    i=2;

    return 0;

}

 

(三)添加另一个头文件secondnamespace.h,内容如下:

#ifndef SECONDNAMESPACE_H_

#define SECONDNAMESPACE_H_

 

class B

{

public:

    int value;

};

 

namespace mynp       //demonamespace.h中的mynp同名

{

    B mb;

}

 

#endif /* SECONDNAMESPACE_H_ */

 

主文件替换为:

#include "demonamespace.h"

#include "secondnamespace.h"

using namespace mynp;       //指明将两个头文件的mynp都添加进来

 

int main() {

    ma.value=2;

    mb.value=3;

    return 0;

}

 

同时将两个头文件中的mynp添加到了主文件

 

****************************************************************

(四)测试,对于#include<iostream>using namespace std;在主文件只添加其一,编译报错提示和(二)相同,经查资料,头文件iostrem中包含了一个namespace std;特别地头文件string中也有一个namespace std;当同时将iostreamstring添到同一文件,是允许的,此时的情形和()相同。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值