Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1074297
  • 博文数量: 77
  • 博客积分: 821
  • 博客等级: 军士长
  • 技术积分: 1905
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-23 16:17
个人简介

学校:上海交通大学软件工程 学历:硕士 行业:从事流媒体移动开发 QQ: 412595942 邮箱:yiikai1987910@gmail.com

文章分类

全部博文(77)

文章存档

2016年(4)

2015年(15)

2014年(16)

2013年(12)

2012年(21)

2011年(9)

分类: C/C++

2011-12-14 22:05:11

    最近遇到个重命名的问题,顺便把namespace复习了下,特此记下防止以后遗忘!!!
namespace命名空间,良好的使用这个关键字可以防止在大型工程中的多文件中的函数名,类名冲突等因名字相同引发的问题,现在举个简单的例子:
  1. #ifndef T1_H
  2. #define T1_H

  3. #include <stdio.h>

  4. namespace classA
  5. {
  6.     class A
  7.     {
  8.         public:
  9.             A();
  10.             ~A();
  11.             void test();
  12.     };

  13.     void haha();
  14. }

  15. namespace classB
  16. {
  17.     class A
  18.     {
  19.         public:
  20.             A();
  21.             ~A();
  22.             void test();
  23.     };
  24.     void haha();
  25. }
  26. #endif
这个头文件中定义了两个类名相同的文件,和两个同名的函数,如果没有给他们定义指定的命名空间的话,当然会编译不过了!
包含了命名空间后如何定义他们呢?
  1. #include "t1.h"
  2. namespace classA
  3. {
  4.     A::A()
  5.     {
  6.         ;
  7.     }

  8.     A::~A()
  9.     {
  10.         ;
  11.     }

  12.     void A::test()
  13.     {
  14.         printf("A\n");
  15.     }

  16.     void haha()
  17.     {
  18.         printf("A haha\n");
  19.     }
  20. }
  21. namespace classB
  22. {
  23.     A::A()
  24.     {
  25.         ;
  26.     }

  27.     A::~A()
  28.     {
  29.         ;
  30.     }

  31.     void A::test()
  32.     {
  33.         printf("B\n");
  34.     }

  35.     void haha()
  36.     {
  37.         printf("B haha\n");
  38.     }
  39. }
使用他们的方法如下:
  1. #include "t1.h"
  2. //using namespace classA;       //如果这两个类相同的名字不会在同一文件中构造,就不用在构造类对象前加名称空间域,只要加这句就会默认构造classA域中的类A对象,同理其他同名的函数接口或其他的
  3. //using namespace classB;
  4. int main()
  5. {
  6.     classA::A a;
  7.     classB::A b;
  8.     a.test();
  9.     b.test();
  10.     classA::haha();
  11.     classB::haha();
  12.     return 0;
  13. }

如果在构造两个类A对象时不用域名的话,程序编译会报
main.cpp:6: error: reference to ‘A’ is ambiguous
t1.h:22: error: candidates are: class classB::A
t1.h:9: error:                 class classA::A
main.cpp:6: error: reference to ‘A’ is ambiguous
t1.h:22: error: candidates are: class classB::A
t1.h:9: error:                 class classA::A
这种混乱的对象错误



阅读(3650) | 评论(0) | 转发(0) |
0

上一篇:rtsp工作随记

下一篇:gstreamer编译笔记

给主人留下些什么吧!~~