为什么加上这个就能用?using namespace是什么意思?
2008-01-18 16:10
766 查看
来源:http://www.ucnu.cn/software/p676/A67683089.shtml
然后在头文件中写上
#include <iostream>
头文件尾上加using namespace std;
网友回答:
网友:rgbcn
命名空间的概念
很多初学c++的人,对于c++中的一些基本的但又不常用的概念感到模糊,命名空间(namespace)就是这样一个概念。
c++中采用的是单一的全局变量命名空间。在这单一的空间中,如果有两个变量或函数的名字完全相同,就会出现冲突。当然,你也可以使用不同的名字,但有时我们并不知道另一个变量也使用完全相同的名字;有时为了程序的方便,必需使用同一名字。比如你定义了一个变量string user_name, 有可能在你调用的某个库文件或另外的程序代码中也定义了相同名字的变量,这就会出现冲突。命名空间就是为解决c++中的变量、函数的命名冲突而服务的。解决的办法就是将你的strtemp变量定义在一个不同名字的命名空间中。就好像张家有电视机,李家也有同样型号的电视机,但我们能区分清楚,就是因为他们分属不同的家庭。
例如:
#include <iostream>
#include <string>
using namespace std;
//using namespace编译指示,使在c++标准类库中定义的名字在本程序中可以使用
//否则,iostream,string 等c++标准类就不可见了,编译就会出错。
//两个在不同命名空间中定义的名字相同的变量
namespace myown1{
string user_name = "myown1";
}
namespace myown2{
string user_name = "myown2";
}
int main()
{
cout<< "/n"
<< "hello, "
<< myown1::user_name //用命名空间限制符myown1访问变量user_name
<< "... and goodbye!/n";
cout<< "/n"
<< "hello, "
<< myown2::user_name //用命名空间限制符myown2访问变量user_name
<< "... and goodbye!/n";
return 0;
}
当然,我们也可以使用程序开头的预编译指示来使用命名空间中的名字。使用预编译指示的好处在于在程序中不必显式地使用命名空间限制符来访问变量。以上主程序可修改为:
int main()
{
using namespace myown1;
cout<< "/n"
<< "hello, "
<< user_name
<< "... and goodbye!/n";
// using namespace myown2;
cout<< "/n"
<< "hello, "
<< myown2::user_name //用命名空间限制符myown2访问变量user_name
<< "... and goodbye!/n";
return 0;
}
但第二个变量必需用命名空间限制符来访问,因为此时myown1空间中的变量已经可见,如果不加限制,编译器就会无法识别是那一个命名空间中的变量。这一点一定要注意。 以上只是初学者不清楚的一个概念,在以后的文章中还将继续讨论其它的一些概念。
.
其它问题:
1、C中有没有函数可以统计一个目录下文件子目录个数
或者除了directory(3C)还有没有其它对目录操作的库?
2、关于动态生成控件的问题1
听大侠的话,问题一个一个问,呵呵
问题1:动态生成几个控件,如何判断哪个控件被选中进行拖放/缩放?(动态生成的控件的唯一标识是什么?)
比如,在RichEdit上动态产生2个控件,产生第1个时可以对1进行拖放,然后再产生
第2个时可以对2进行拖放,但是这时就不能对1进行拖放了,这时对1进行拖放还是2在拖放,而1没有反应,请教是什么原因?
注:动态产生的控件是一个链表结构,每动态生成一个控件就加入链表中
相关代码如下:
TDataFieldList=^DFL;
DFL=Record
DataField:TRichEdit;
Name:string;
XPos:integer;
YPos:integer;
Next:TDataFieldList;
end;
var DataFieldList:TDataFieldList;
AEdt:TRichEdit;
procedure TFormDataField.EdtOnDragOver(Sender,Source:TObject;X,Y:Integer;
State:TDragState;var Accept:Boolean);
var p:TDataFieldList;
begin
p:=DataFieldList;
while Source<>p.DataField do//判断是哪个控件被拖放
p:=p.Next;
// if Source=AEdt then
Accept:=True;
FormNew.isDragFormNew:=True;
end;
为什么加上这个就能用?using namespace是什么意思?
Posted on 10月 13rd, 2007然后在头文件中写上
#include <iostream>
头文件尾上加using namespace std;
网友回答:
网友:rgbcn
命名空间的概念
很多初学c++的人,对于c++中的一些基本的但又不常用的概念感到模糊,命名空间(namespace)就是这样一个概念。
c++中采用的是单一的全局变量命名空间。在这单一的空间中,如果有两个变量或函数的名字完全相同,就会出现冲突。当然,你也可以使用不同的名字,但有时我们并不知道另一个变量也使用完全相同的名字;有时为了程序的方便,必需使用同一名字。比如你定义了一个变量string user_name, 有可能在你调用的某个库文件或另外的程序代码中也定义了相同名字的变量,这就会出现冲突。命名空间就是为解决c++中的变量、函数的命名冲突而服务的。解决的办法就是将你的strtemp变量定义在一个不同名字的命名空间中。就好像张家有电视机,李家也有同样型号的电视机,但我们能区分清楚,就是因为他们分属不同的家庭。
例如:
#include <iostream>
#include <string>
using namespace std;
//using namespace编译指示,使在c++标准类库中定义的名字在本程序中可以使用
//否则,iostream,string 等c++标准类就不可见了,编译就会出错。
//两个在不同命名空间中定义的名字相同的变量
namespace myown1{
string user_name = "myown1";
}
namespace myown2{
string user_name = "myown2";
}
int main()
{
cout<< "/n"
<< "hello, "
<< myown1::user_name //用命名空间限制符myown1访问变量user_name
<< "... and goodbye!/n";
cout<< "/n"
<< "hello, "
<< myown2::user_name //用命名空间限制符myown2访问变量user_name
<< "... and goodbye!/n";
return 0;
}
当然,我们也可以使用程序开头的预编译指示来使用命名空间中的名字。使用预编译指示的好处在于在程序中不必显式地使用命名空间限制符来访问变量。以上主程序可修改为:
int main()
{
using namespace myown1;
cout<< "/n"
<< "hello, "
<< user_name
<< "... and goodbye!/n";
// using namespace myown2;
cout<< "/n"
<< "hello, "
<< myown2::user_name //用命名空间限制符myown2访问变量user_name
<< "... and goodbye!/n";
return 0;
}
但第二个变量必需用命名空间限制符来访问,因为此时myown1空间中的变量已经可见,如果不加限制,编译器就会无法识别是那一个命名空间中的变量。这一点一定要注意。 以上只是初学者不清楚的一个概念,在以后的文章中还将继续讨论其它的一些概念。
.
其它问题:
1、C中有没有函数可以统计一个目录下文件子目录个数
或者除了directory(3C)还有没有其它对目录操作的库?
2、关于动态生成控件的问题1
听大侠的话,问题一个一个问,呵呵
问题1:动态生成几个控件,如何判断哪个控件被选中进行拖放/缩放?(动态生成的控件的唯一标识是什么?)
比如,在RichEdit上动态产生2个控件,产生第1个时可以对1进行拖放,然后再产生
第2个时可以对2进行拖放,但是这时就不能对1进行拖放了,这时对1进行拖放还是2在拖放,而1没有反应,请教是什么原因?
注:动态产生的控件是一个链表结构,每动态生成一个控件就加入链表中
相关代码如下:
TDataFieldList=^DFL;
DFL=Record
DataField:TRichEdit;
Name:string;
XPos:integer;
YPos:integer;
Next:TDataFieldList;
end;
var DataFieldList:TDataFieldList;
AEdt:TRichEdit;
procedure TFormDataField.EdtOnDragOver(Sender,Source:TObject;X,Y:Integer;
State:TDragState;var Accept:Boolean);
var p:TDataFieldList;
begin
p:=DataFieldList;
while Source<>p.DataField do//判断是哪个控件被拖放
p:=p.Next;
// if Source=AEdt then
Accept:=True;
FormNew.isDragFormNew:=True;
end;
相关文章推荐
- 请问这个「 (?<=<(\w+)>).*(?=<\/\1>) 」正则表达式是什么意思呢?
- 什么是集电极开路(OC)?什么是漏极开路(OD)?为什么必须要在OC门输出的IO口上加上拉电阻?
- a href="javascript:void(0)" 是什么意思?加不加上有什么区别
- 用户到底想要什么?为什么要用这个产品? 3ff8
- @mysql_select_db ,在mysql_select_db()前加上@是什么意思?
- 联想的网页出了这个是什么意思???
- word里显示的这个向下箭头是什么意思
- padding:10px 0 10px 20px; css中的这个是什么意思
- log4j.properties这个文件为什么放到src目录下就能起作用
- 线性代数里为什么吧常数项为零的方程组叫做齐次方程组? 不为零就叫非齐次。 这齐次是什么意思?
- 404错误是什么意思?为什么是404?
- 什么是GC,GC是什么意思?为什么要有GC?
- 这个网页用到了什么技术,<script>标签,还有双大括号{{}}是什么意思
- 为什么默认都要包含stdafx.h这个文件,它的作用是什么?
- 请问大神们,Xcode 中这个蓝色的箭头是什么意思啊
- 什么是集电极开路(OC)?什么是漏极开路(OD)?为什么必须要在OC门输出的IO口上加上拉电阻?什么是推挽输出?
- 当我们建站的时候,问问自己为什么要建设这个网站?有什么收益么?处于什么样子的目的?
- 不管你的Python报什么错,用这个模块就能正常运行
- Koala Framework是什么?我为什么要写这个框架?
- 帮我看看这个是什么意思 c++代码