namespace命令,谁能用通俗易懂的方式解释一下C 里的 namespace到底是干什么用

1,谁能用通俗易懂的方式解释一下C 里的 namespace到底是干什么用就是字面意思,命名空间 , 不同命名空间的类名,函数名,变量名等可以相同 。比如namespace Aclass Foo}namespace Bclass Foo}【namespace命令,谁能用通俗易懂的方式解释一下C 里的 namespace到底是干什么用】
2 , 关于C中namespace的问题include是引用一个文件比如你说的include这个就是把文件iostream引用进来,但是不代表你可以直接用这个文件里面的函数而namespace是命名也就是文件iostream中的函数使用的是STD的命名要想使用iostream的函数必须使用这个命名空间也就是std
3,aspnet里namespace是什么有什么作用namespace可以理解为逻辑上的函数库(里面包含各类函数),与之对应的是assembly,属于物理上的函数库(即一个个DLL文件) 。namespace是有层次的,这就好象书的章节一样 , 这样在使用namespace中的类和对象时,就比较容易了 。象下面这个例子:dim abc As System.IO.StreamReader,一看就知道这是把abc定义为system命名空间下的IO子空间中的StreamReader类 。由于各名字空间实际是保存在各程序集(assembly)中的,因此使用名字空间前需要先引用其所在的程序集 。根据需要也可写 import namespace,这样以后使用namesapce中的类和对象时可省略那一长串路径 。比如刚才的例子可以写成这样:import System.IOdim abc as StreamReader有了namespace后,同名的类和函数就被允许了,因为它们位于不同的namespace中 , 不会产生冲突!比如System.Web.UI空间下有TextBox类 , 而System.Windows.Forms空间下也有一个TextBox类 , 这两个类的名字完全一致(其实功用也差不多) , 但你在使用它们的时候,系统能够很好的分辨到底是哪一个,这就是namespace的关系!当然,除了系统的namespace,开发者可以自己定义自己的namespace 。其实当你编译一个解决方案时,系统也会用你的项目名称做名字,生成一个namespace,并把你的类(其实每个web页面就是一个类)都放在这个namespace下面!你好!楼上的回答很详细.我的回答你还满意吗~~
4,c namespace问题(1)namespace 形象点说 , 就像“家”一样,里面可以有函数,变量 , 类。当你要使用这个家里的东西 , 必须声明他,表示你用的这个东西从那来的 。(2) (3) <iostream><iostream.h>这两个文件基本的功效是一样的,前者是c++标准头文件,而后者是为了保持 和c兼容采用的头文件,而c语言 没用命名空间这个概念, 所以你的第二个问题可以不用考虑,因为namespace std 在 <iostream> 中声明过,而没有在 <iostream.h>中声明(4) 关于这个使用高不高,如果项目大型的话 , 使用频率就比较高,如果小型项目,用的比较少首先声明空间的名字不能够重复,是编译不过的,不然系统不知道你调用哪一个DD空间的内容 。using namespace dd;的作用就是把后面的变量和函数都使用dd空间里面的,直到下一个using namespace 名字;出现,dd::classA::A()前面使用了using namespace dd;后面可以不加dd:: 。但是为了防止出错,加上dd::是明确告诉系统我用的class A是dd空间的 。程序员只是怕空间多 , 变量会换乱 , 所以明确一下空间而已 。如果你在命名空间里定义函数的实现,就不用加dd::了比如namespace ddclass Apublic:A();}A::A()}}如果你在命名空间外面定义函数实现 , 就要加dd::namespace ddclass Apublic:A();}}dd::A::A()}using namesapce dd;是用在调用的时候的,实现的时候是没用的 , 必须如下实现dd:classA:A()或者namespace dd classA:A()}}5,extern 与 namespace 的用法1、在C中,给全局变量,函数,加上 static,表示当前函数和变量的linkage 为 internal,这样,就可以在不同的unit 中定义同名的函数和变量了 。但是 , 加了static 的函数和变量就不用作为模板费类型参数了 。(模板的非类型参数 , 必须是编译期确定的,exterl 性质的,整形常量或者指针常量)2、在C++中,同样解决这种在不同的编译unit中定义同名的函数和变量的,这样就有了匿名的namespace, C++会为每个匿名的namespace生成一个唯一的 名字: __UNITQUE_NAMESPACE_NAME,并会再定义时后,加上 using namespace __UNITQUE_NAMESPACE_NAME , 这样也就就解决了变量和函数名字冲突问题 。这里解决冲突的同时,并不会给函数和变量限定为 internal linkage 。之所以出现连接错误是因为:在namespace data 中只是对 x 进行了声明,而非定义.即就是说,namespace data 中的int x不是namespace data 中的东西.这里只不过只是对x的一个声明而已,为的是在data中可以引用全局变量xextern 表明int x只是一个声明,而非定义(告诉编译器这里的x在别的地方)因为组合较多,下面是一种改法://main.cpp#include#include"data.h" using std::cout; using std::endl; int main() { cout<< return 0; } //data.cpp int x =1; //data.h extern int x; 至于namespace 在这里是用不到的: 这是由于如果x是namespace data中的,那么用extern岂不是多此一举(extern int data::x)而且还是错误的用法! 希望能解决你的问题! extern的详细用法见 http://wenwen.sogou.com/z/q660859045.htm你好!修改data.cpp文件://文件 data.cppnamespace dataint x =1;}其余的都不变就可以了 。这样x就是namespace data中的数据了,而不是一个所谓的无法解析的外部符号 。而且不会因为data.h被包含在了其他的.cpp文件中而发重定义 。因为data.h中只是申明x而矣 。如有疑问,请追问 。/*extern在C和C++中是为了使用全局变量的 。说明变量具有外部链接属性!在C和C++语言中 , 使用全局变量有两种方法 。其一:你在一个.cpp文件中定义了一个全局变量,如果你在别的地方需要使用这个变量你可以用extern 声明一下,告诉编译器这个变量是在别的.cpp文件定义过的全局变量 。其二:也是建议用的,就是把在程序中要使用的全局变量放在头文件中 , 你只需要在使用的地方用#include把头文件包含进就可以了 。namespace命名空间是一个逻辑块,可以避免命名冲突 。具体到你这个地方,其实你在namespace data这个命名空间中,你并没有声明一个变量,你只是用externint x;告诉编译器这个int 型的变量x是在别的.cpp文件中定义过的 。你给的那个补充说明也是这么一个意思 。就是在data.cpp中你定义的int x =1; 。这时候你在namespace data 命名空间中操作的x是在data.cpp中定义的x 。这个变量x并不是命名空间data中的,所以就会产生你那个链接错误 , 找不到符号 。这时你不妨在namespace data 中写一个函数 , 改写x的值,试试 。你要是想要在namespace data定义x,就得把前面的extern去掉 。在你这个程序中,只需要在main()函数中加上一句extern int x;程序就可以正常运行,这说明你在main()函数中使用的是在data.cpp文件中定义的全局变量 。#include#include"data.h" using std::cout; using std::endl; int main() { extern int x; cout<< return 0; } 也可以这样修改,这时候使用的是在namespace data命名空间中定义的 x变量了 。//文件 data.h namespace data { int x=100; } 主函数文件: #include #include"data.h" using std::cout; using std::endl; using data::x; int main() { cout<< return 0; } */

    推荐阅读