请教关于c++名字空间的我问题?

ashizl 2008-03-18 09:25:51
小弟现在学c++,遇到一个问题。
我是按照c++ primer 第三版学的。有如下的程序:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;
int main()
{
istream_iterator<string> in( cin ), eos;
vector<string> text;
ֵ
copy( in, eos, back_inserter( text ));
sort(text.begin(), text.end());

vector<string>::iterator it;
it = unique( text.begin(), text.end() );
text.erase( it, text.end() );

//show the result
int line_cnt = 1;
for( vector< string >::iterator iter = text.begin(); iter != text.end(); ++iter, ++line_cnt)
{
cout << *iter
<<( line_cnt % 9 ? " " : "\n");

}
cout << endl;
return 0;
}

但是编译的时候总是出现错误,是名字空间的问题。错误在红色一行。
而且书上是没有 using namespace std;此行的。

凡是书上没有名字空间的地方,我编译的时候必须得加上。因此不明白这到底是怎么回事?请教。
我的编译器是gcc 4.2.1。
多谢。
...全文
425 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
thecorr 2008-03-20
  • 打赏
  • 举报
回复
啥子问题
Lynn_Ran 2008-03-20
  • 打赏
  • 举报
回复
我记得那本书在开始的时候提到了,以后的程序默认已经用using namespace std大概这样的话,建议楼主仔细看看
IT_lau 2008-03-20
  • 打赏
  • 举报
回复
#include <iostream> 改为:
#include <iostream.h>
ashizl 2008-03-20
  • 打赏
  • 举报
回复

多谢2楼。讲的很好。学习了。
ashizl 2008-03-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 taodm 的回复:]
楼主,你难道认为书上的每个例子都要一遍又一遍老生常谈地写下using namespace std;你才能学会编程?
每个例子都只有1、2个突出点,其它细节是要你自己思考的。
[/Quote]

是了。
谢!
ashizl 2008-03-20
  • 打赏
  • 举报
回复
多谢楼上各位。
我以前只用过c,刚开始学c++。
多谢各位指点。我发先差距是巨大的。我会好好努力的。
taodm 2008-03-18
  • 打赏
  • 举报
回复
楼主,你难道认为书上的每个例子都要一遍又一遍老生常谈地写下using namespace std;你才能学会编程?
每个例子都只有1、2个突出点,其它细节是要你自己思考的。
thecorr 2008-03-18
  • 打赏
  • 举报
回复
顶了
C++ Primer的程序都是讲的c++标准的,甚至有的现在编译器都不支持。
现在的编译器都是把c++标准集成到std名字空间里的。
星羽 2008-03-18
  • 打赏
  • 举报
回复
C++之名字空间2007-08-18 04:34Namespaces
名字空间允许像类,对象和函数一样的一组实体归属于一个名称。把一个全局的范围化分成许多子的范围,每一个小的范围都有它自己的名字。

名字空间的格式是:

namespace identifier{

entities

}




包含在名字空间下的任何类,对象和函数中设立的实体必须是有效的标签符,例如:

namespace myNamespace{

int a, b;

}




这种情况,在被调用的名字空间myNamespace内部变量a和变量b被定义成了一个普通的变量,为了从myNamespace外部访问这些变量,我们必须使用作用域操作符::,例如,从myNamespace外部访问前面定义的变量,我们要这样写:

general::a

general::b







名字空间的功能一个全局的对象或者函数像另外一个对象一样使用了同一个标识符时特别有用,会引起重定义的错误,例如:

//namespace

#include <iostream>

using namespace std;

namespace first{

int var = 5;

}

namespace second{

double var = 3.1416;

}

int main() {

cout << first::var << endl;

cout << second::var <<endl;

return 0;

}







程序运行如下:

5

3.1416







这种情况我们使用了两个相同名字的全局变量:var。一个是被定义在first名字空间里的,另一个是被定义在second名字空间内的。因为有了名字空间所以没有发生重定义的错误。




using
使用using 这个关键字是为了将一个来到名字空间内的名字介绍到当前声明的区域,例如:




//namespace

#include <iostream>

using namespace std;

namespace first{

int x = 5;

int y = 10;

}

namespace second{

double x = 3.1416;

double y = 2.7183;

}

int main() {

using first::x;

using second::y;

cout << x << endl;

cout << y <<endl;

cout <<first::y <<endl;

cout <<second::x <<endl;

return 0;

}







程序运行如下:




5

2.7183

10

3.1416







如何注意这段代码,x(没有任何名字空间标识符)是引用first::x,而y引用second::y,正是由于我们在前面指定了using这个声明,所以们仍然要使用标识符全名来访问first::y 和 second::x。

关键字using也能直接指向一个实体名字空间。




//namespace

#include <iostream>

using namespace std;

namespace first{

int x = 5;

int y = 10;

}

namespace second{

double x = 3.1416;

double y = 2.7183;

}

int main() {

using namespace first;

cout << x << endl;

cout << y <<endl;

cout <<second::x <<endl;

cout <<second::y <<endl;

return 0;

}




程序运行如下:




5

10

3.1416

2.7183




这个情况,我们定义过using namespace frist,所有直接使用x和y没有使用名字空间标识符而是引用了定义的名字空间frist。




using和using namespace 仅仅是在同一个块里有效,它们规定在整个代码内,是否是在全局范围里直接使用,例如,如果我们打算首先使用一个名字空间的对象,再使用别外一个名字空间的对象,我们应该这样做:

//namespace

#include <iostream>

using namespace std;

namespace first{

int x = 5;

}

namespace second{

double x = 3.1416;

}

int main() {

using namespace first;{

cout << x << endl;

}{

using namespace second;

cout << x <<endl;

}

return 0;

}




程序运行如下:




5

3.1416




名字空间别名(Namespace alias)
我们能改变一个已经存在的名字空间的命名,相应的格式如下:




namespace new_name = current_name;




名字空间std (namespace std)
C++标准类库中的所有实体都定义在名字空间std中,这就是为什么我们通常需要包含一个using namespace std,描述在所有的程序中使用的实体都定义在iostream中。

lzpggg 2008-03-18
  • 打赏
  • 举报
回复
vc6运行没问题!!!
内容概要:本文系统梳理了多个科研领域的前沿研究与技术实现,重点涵盖FDTD方法中的完美匹配层(PML)研究,以及Matlab/Simulink在电磁、电力、控制、通信、信号处理、图像处理、路径规划、能源系统优化等领域的仿真与算法实现。文中列举了大量基于Matlab和Python的科研案例,如风电功率预测、负荷预测、无人机三维路径规划、电池系统故障诊断、雷达模拟、通信编码、微电网优化调度等,并强调结合智能优化算法(如粒子群、遗传算法、深度学习等)提升系统性能。同时,提供了丰富的代码资源与仿真模型,涵盖永磁同步电机控制、逆变器设计、多智能体任务分配、虚拟电厂调度等复杂系统,助力科研人员快速开展复现实验与创新研究。; 适合人群:具备一定编程基础,熟悉Matlab/Python工具,从事电气工程、自动化、通信、人工智能、新能源、控制科学等相关领域研究的研发人员及研究生。; 使用场景及目标:① 学习并实现FDTD仿真中的PML边界条件以有效抑制数值反射;② 掌握Matlab/Simulink在多物理场建模、控制系统设计与优化算法中的综合应用;③ 借助提供的代码资源完成科研复现、课程设计、竞赛项目或工程原型开发; 阅读建议:此资源以科研实战为导向,不仅提供理论方法,更强调代码实现与仿真验证。建议读者结合自身研究方向,按目录顺序查阅相关模块,下载配套代码进行调试与二次开发,以达到学以致用、融会贯通的目的。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧