四月 07

这两天在学习的过程中遇到了一些莫名其妙的问题,所有的语言初学者应该都会去写那么无聊无趣的”Hello World!”程序吧,那么来看看我的第一个C++ Hello World:

#include 
int main()
{
cout << "Hello World!" << endl;
return 0;
}

保存为test.cpp。

按照我之前的记忆,这个简单的小程序肯定是没问题,我在Cygwin的命令行里面输入:

g++ test.cpp -o test

满以为……呵呵……结果却是

test.cpp: In function `int main()’:
test.cpp:5: error: `cout’ undeclared (first use this function)
test.cpp:5: error: (Each undeclared identifier is reported only once for each function it appears in.)
test.cpp:5: error: `endl’ undeclared (first use this function)

说cout和endl都没有定义!不可能!

我到网上一通乱找,翻来翻去,那些C++的教程全都和我一样,却没有提到我的错误,难道是我错了?是不是我的GCC装得有问题?

没辙了,后来我在gcc的include目录里面打开iostream文件来看才知道,里面使用了std的名字空间!如果上面的程序要想编译通过必须这样写:

#include 
using namespace std;
int main()
{
cout << "Hello World!" << endl;
return 0;
}

就没问题了。

我看了一下《C++ Primer》,里面第8章提到了std名字空间,原来标准C++所有的组件全部定义在这个名字空间下,如果要使用标准C++组件,就必须using它,Lippman先生给出的建议是在一个头文件里面统一引用所有要用的组件,这样就不用麻烦每次都写using语句了。

C++的世界已经不像我想象的那样了。

四月 07

首先声明,我将要学习的是标准C++(ISO C++ Standard)。

现在介绍一下我的学习环境:

操作系统:Windows XP Service Pack 2
编辑环境:Eclipse + CDT、CygWin + VI、PuTTyCyg
编译器 :GCC (the GNU Compiler Collection)

之所以选择Eclipse是因为我对VI还不太熟悉,而且也不想用那些巨大的C++ Builder、Visual Studio等等(国内很多人都在用VC++6.0,我觉得外观太丑了,连字体都不能换,呵呵偏执),我这个人比较怪异,学C++就应该用自由开源的工具,既小巧也高效。

GCC编译器的Windows版本(姑且让我这么说)是CygWin,它可以在Windows环境下模拟出完整的Unix/Linux C++编辑编译环境,emacs、xemacs一应俱全。作为Windows下面的跨系统的C++编译调试环境,CygWin十分方便。

下面我就来讲讲环境的安装:

CygWin、puTTyCyg安装

登陆www.cygwin.com,点击页面最右边的”Install CygWin Now”链接,下载最新版的Setup.exe安装文件。

下载完成之后,双击setup.exe文件开始安装,出现”Cygwin Net Release Setup Program”对话框,告诉你CygWin的安装需要从网上下载,点击”下一步”,这个时候Cygwin会提示你选择安装源(Choose A Download Source)建议大家选择第二项”Download Without Installing”,这样可以先把安装文件下载到本地,以便日后的多次安装。

点击”下一步”,这个时候会提示你选择下载的保存目录,指定一个,姑且叫做”x:\cygwin”,如果出现网络中断或者其他情况,需要断点续传的时候,Cygwin的安装文件会自动指向这里的,这一点它做的还不错。

点击”下一步”,进行网络设置,需要代理的朋友可以在这里设置,继续。

“下一步”,这时Cygwin开始到服务器获取下载服务器镜像列表,接下来会出现许多的服务器,Cygwin会从你的选择中自动选出速度最快的服务器进行下载,在本地文件的下载目录里面就会建立相应的子目录,经过我的测试,推荐大家直接选择http://mirrors.kernel.org这个服务器。

“下一步”,Cygwin会提示你”Select Package”,其实就是让你选择要安装那些模块,缺省是”Default”,建议在”All”上面点击,选择成”Intall”,这样就可以下载所有的组件了。

“下一步”,就开始下载了,耐心等待,直到下载完成。如果需要断点续传,那么在第五步的时候选择”ReInstall”,CygWin会自动去判断下载了那些文件,还有那些没有下载,呵呵这么怪异的断点续传,还是头回见。

下载完成之后,再次启动setup.exe,这时就要选择”Install From Loal Directory”,然后再选择安装目录,选择下载文件所在的目录”x:\cygwin”,Cygwin会自动在众多的下载目录里面选择上次下载完成了的那个,贴心,呵呵。

“下一步”就又出现第5步出现的对话框,选择”All Install”开始安装,等待完成。这样GCC的环境就安装好了,要启动Cygwin,只需要到安装目录里面启动cygwin.bat就行了。

不过,缺省的Windows命令窗口无法全屏,用起来实在不爽,没关系,用PuttyCyg可以实现Linux Shell下面的众多功能,建议安装,过程很简单。大家可以在网上搜搜看。

Eclipse + CDT 3.0.2安装

Eclipse的安装就太简单了,到Eclipse.org上面下载最新的稳定版本,3.0以上就行,直接解压就行了。CDT是Eclipse的IDE插件,专门提供C/C++开发环境的,同样也是在Eclipse.org上面下载解压到指定目录就可以用了。至此,我整个的学习环境就算搭建完成了,等到熟悉了,我在Linux上面再搭建一个C++的开发环境。

四月 07

基于某种需要,开始恶补C++的基础知识。虽然写程序也不是一两年了,C/C++的知识也是一再学习,但是每次都无疾而终,不了了之。惭愧,在现在Java/.NET大行天下的时代,我却发现C++对我充满了吸引力,呵呵,脑子可能有问题。

为了能够取得良好的学习效果,我选择了一本很好书——《C++ Primer》(第四版),这本书对于初学C++的人真是太合适不过了,每一个知识点都反复举例,力求澄清混淆,给人深刻印象,也消除了我多年来对C++的很多误解。

但是,干干的去看书,实在是效果不好,结合实际的项目学习新知识想必每个程序员都知道这是事半功倍的办法,所以我选择几个实际的C++项目来进行学习,希望可以提高学习的效果。作为初学者,实现算法应该是学习语言比较好的一种项目实做方式,我选择了《算法I-IV (C++实现)》作为辅导书。

下面的笔记,很可能是混乱的、零碎的,甚至有些东西在高手看来是可笑的,但是我自己在学习C++过程中的体会,记下来,对自己的提高一定有帮助。