本文共 1773 字,大约阅读时间需要 5 分钟。
1,命名空间简介
命名空间随标准C++而引入,相当于一个灵活的文件域(全局域),以关键字namespace开头给其起个名字,并用大括号把定义区域括起来(声明块)。在域外使用域内成员时,需要加上命名空间名作为前缀,再加上域操作符“::”,可以使用嵌套定义。
如果在关键字namespace之前使用using,就不必使用限定修饰名,即可以一次性使命名空间中所有成员都可以直接被使用。
标准C++库中所有组件都在std的命名空间中声明和定义的,在标准C++平台调用如下语句:
using namespace std;
便可直接使用标准C++库中所有成员,注意:如果使用命名空间std,则#include编译预处理命令包含头文件时,必须去掉扩展名(.h)。
2,常见问题分析 2.1 使用标准C++命名空间std时,加载头文件:错误代码:
#includeusing namespace std;void main(){ cout<<"Hello,world!"<
错误 1 error C1083: 无法打开包括文件:“iostream.h”: No such file or directory c:\users\dell\documents\visual studio 2012\projects\project\project\code1.cpp 1 1 Project
分析:
在标准C++命名空间std,<iostream.h>和不同,C++标准明确提出不支持后缀为(.h)的头文件(为了与C区别和正确使用命名空间)。正确代码:
#includeusing namespace std;void main(){ cout<<"Hello,world!"<
2.2 命名冲突:
错误代码:
#include"class1.h"#include"class2.h"#includeusing namespace std;void main(){ MyClass x; MyClass y; x.Info(); y.Info(); getchar();}//class1.h#include using namespace std;class MyClass{public: void Info() { cout<<"头文件class1.h"< using namespace std;class MyClass{public: void Info() { cout<<"头文件class2.h"<
错误 1 error C2011: “MyClass”:“class”类型重定义 c:\users\dell\documents\visual studio 2012\projects\project\project\class2.h 4 1 Project
分析:
class1.h和class2.h头文件都定义了类MyClass,导致名字冲突,编译器认为MyClass被重复定义。解决办法之一改动其中一个类名,之二在class1.h和class2.h头文件中都引入namespace。正确代码:
#include"class1.h"#include"class2.h"#includeusing namespace std;void main(){ MyNamespace1::MyClass x; MyNamespace2::MyClass y; x.Info(); y.Info(); getchar();}//class1.h#include using namespace std;namespace MyNamespace1{class MyClass{public: void Info() { cout<<"头文件class1.h"< using namespace std;namespace MyNamespace2{class MyClass{public: void Info() { cout<<"头文件class2.h"<
转载地址:http://vahwi.baihongyu.com/