`

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添到同一文件,是允许的,此时的情形和()相同。

3
0
分享到:
评论

相关推荐

    C++快速学习,头文件与命名空间

    C++头文件与命名空间的介绍

    c++ 命名空间

    C++标准明确规定不再支持带有`.h`后缀的头文件,这是为了让C++与C语言更加明确地区分开来,并且利用命名空间的功能。这意味着,当你使用`&lt;iostream.h&gt;`时,实际上是在使用全局命名空间,类似于早期C++实现的方式;而...

    c++自制game.h头文件

    8. **命名空间(Namespaces)**:C++的命名空间可以防止全局变量和函数的命名冲突,"game.h"可能定义了一个或多个命名空间,将相关的类和函数组织在一起。 9. **类定义(Class Definitions)**:游戏开发中通常会...

    c和c++头文件

    C++与C语言的一个重要差异是,C++支持命名空间(namespace),如`std`,以避免全局命名冲突。此外,C++的头文件经常包含类型定义(typedef)、类(class)和模板(template)。例如,`&lt;iostream&gt;`引入了`std::...

    C++各种函数及对应的头文件

    - **命名空间**:用于组织和区分不同的元素,如`std`命名空间包含了大部分C++标准库的元素。 #### 标准库函数详解 ##### 通用算法 - **排序算法**: - `sort()`:对容器进行排序,位于`&lt;algorithm&gt;`头文件中。该...

    C和C++头文件对比一览

    - **命名空间**:C++中的头文件内容通常位于`std`命名空间内,而C语言的头文件内容则不在任何命名空间内。 - **模板化**:C++中的许多组件(如`&lt;iostream&gt;`)已经被模板化,以便更好地支持泛型编程。 - **额外功能**...

    C++标准头文件的结构

    1. **C兼容头文件**:这类头文件以`&lt;c&gt;`前缀开始,如`&lt;cstring&gt;`、`&lt;cstdio&gt;`等,它们提供了与C语言标准库相对应的功能,但进行了命名空间的封装,避免了全局命名空间的污染。 2. **C++特有头文件**:包括`...

    C++头文件转delphi .pas

    3. **命名约定**:C++和Delphi的命名规则不同,转换器需要处理命名空间、类名、函数名的转换,遵循Delphi的命名规范。 4. **接口处理**:C++的虚函数和纯虚函数在Delphi中可以映射为接口实现,这涉及到接口声明和...

    标准C与C++头文件大全.zip

    但为了保持兼容性,C++头文件通常会提供C++风格的封装,例如`#include &lt;cstdlib&gt;`等同于C的`#include &lt;stdlib.h&gt;`,但前者会将所有符号放在`std`命名空间下。 在编程实践中,正确地使用头文件是至关重要的。过度...

    C++头文件手册

    6. **命名空间**:C++的命名空间(namespace)用于解决全局命名冲突问题,如`std`是C++标准库的命名空间,包含大部分头文件中的内容。使用`using namespace std;`可以让程序无需每次都指定`std::`前缀,简化代码。 ...

    protobuf中的命名空间使用demo(C++)

    在C++编程中,protobuf提供了一种类似C++命名空间的机制,被称为“包”(package),用于组织和管理.proto文件中的消息类型和其他定义,避免了全局命名冲突的问题。 在protobuf中,命名空间主要通过在.proto文件中...

    C++常用头文件简介及编译错误大全

    C++从C语言继承了这些头文件,但为了避免与C++的命名空间冲突,C++标准库为每个与C兼容的头文件都提供了对应的无扩展名版本,如、、等。这些无扩展名的头文件不包含宏定义,使得它们更适应C++的命名空间。 传统C++...

    C++ PRIMER 部分头文件及资源

    4. **命名空间namespace**:C++使用命名空间来避免全局命名冲突。例如,标准库中的所有元素都位于`std`命名空间内,所以我们需要使用`std::`前缀来引用它们,如`std::cout`。 5. **类class**:C++中的类是一种用户...

    C与C++头文件一览.doc

    - `&lt;iostream&gt;`:是1998年C++标准之后引入的,它将所有标准库组件放入 `std` 命名空间内。 - `&lt;iostream.h&gt;`:是早期版本中使用的,将组件放置在全局命名空间中。 - **`&lt;cstdio&gt;` 与 `&lt;stdio.h&gt;`**: - `...

    C++每个头文件的功能说明

    4. `&lt;cerrno&gt;`:与`&lt;errno.h&gt;`类似,但在C++命名空间中。 5. `&lt;clocale&gt;`:C++版本的本地化函数。 6. `&lt;cmath&gt;`:与`&lt;math.h&gt;`类似,但使用C++命名空间。 7. `&lt;complex&gt;`:定义复数类。 8. `&lt;cstdio&gt;`:与`&lt;stdio.h&gt;...

    C++命名空间.docx

    标题提到的"C++命名空间"主要涉及到以下知识点: 1. **命名空间的作用**:命名空间的主要目的是解决标识符的可见性和重名问题。通过将相关的函数、类和变量分组到一个命名空间内,可以确保每个标识符在其自身的命名...

    C++头文件(最新版)

    - **命名空间声明**:将代码组织在特定的命名空间内,避免全局命名冲突。 ### 头文件的正确使用方式 为了确保程序的高效运行和减少潜在的错误,合理地使用头文件至关重要: 1. **避免重复包含**:使用预处理器...

    C++命名空间 C++ Builder代码演示

    同时,我们还需要确保在头文件(如`Unit1.h`)中正确处理命名空间,通常使用`extern`关键字来声明外部定义的命名空间成员,或者使用`#include`指令引入其他源文件中的命名空间。 ```cpp // Unit1.h #ifndef UNIT1_H...

    Visual C++ 6.0头文件

    5. **预处理头文件**:如`&lt;预处理指令&gt;.h`,如`&lt;iostream&gt;`实际上是`&lt;iostream.h&gt;`的别名,以适应C++标准的命名规范,同时提供更现代的命名空间和异常处理支持。 在实际编程中,正确地包含头文件是保证程序正常编译...

    C/C++头文件包含

    规则是:如果这个头文件是旧C++特有的,那么去掉h后缀,并放入std名字空间;如果这个头文件是C语言也有的,那么去掉h后缀,增加一个c前缀。 const关键字 在C/C++中,const关键字用于定义常量。例如,应该写成const...

Global site tag (gtag.js) - Google Analytics