免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1715 | 回复: 3
打印 上一主题 下一主题

对于using指示的问题~求大大们解答 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-17 22:54 |只看该作者 |倒序浏览

  1. namespace s1
  2. {
  3.         void k(){cout<<"s1"<<endl;}
  4. }
  5. namespace s2
  6. {
  7.         using namespace s1;
  8.         void k(){cout<<"s2"<<endl;}
  9. }
  10. int main()       
  11. {
  12.         //using namespace s1;
  13.         k();
  14.         return 0;
  15. }
复制代码
您看,在s2中使用using指示,不是将s1的内容提升到包含s1和s2的作用域中吗?为何在main中提示错误:无法找到标示符呢?

论坛徽章:
0
2 [报告]
发表于 2012-06-19 11:42 |只看该作者
namespace 只是申明了一个“命名空间”,要使用这个namespace中的成员,必须使用using namespace ***;

举个例子,你要使用cout等标准输出函数时,是不是要加一句using namespace std;这是因为在 namespace std中定义了vout 的实现。

在你的例子中只有s2 使用了s1, 所以说在s2 中是能够使用s1中的所有成员的,但是在main中使用k()函数的时,既没有看到你using namespace s1,也没有看到你使用using namespace s2,所以报错时肯定。。。

有个结构体,你没有声明一个结构体变量,而直接使用结构体里面的成员这肯定会出问题的。。。

论坛徽章:
0
3 [报告]
发表于 2012-06-21 22:18 |只看该作者

  1. namespace first
  2. {
  3.         int x = 5;
  4. }

  5. namespace second
  6. {
  7.         double x = 3.1416;
  8. }
  9. int main () {
  10.         using namespace first;
  11.         {
  12.                 using namespace first;
  13.                 cout << x << endl;
  14.                 //使用using指示时,就相当于一个声明——在可见该声明的作用域,
  15.                 //就将该命名空间内名字提升到包含指示和该空间的作用域
  16.                 //但当不可见该声明时,
  17.                 //using指示无效,
  18.         }
  19.         cout<<x<<endl;
  20.         {
  21.                 using namespace second;
  22.         //        cout << x << endl;
  23.         }
  24.         return 0;
  25. }
复制代码

论坛徽章:
0
4 [报告]
发表于 2012-06-21 22:28 |只看该作者
main在全局命名空间作用域里面,main的函数体在全局命名空间作用域下的块作用域里面,要是不using和s1、s2有什么关系?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP