C++之旅又再次开始了,还是先把以前的基础再捡一些回来吧,基础的东东我想还是不用看了,把C++一些重要的类似:多态,泛型,指针啥的再看一下,毕竟这些东西已经好多年都没用过了。正好今天看了一下泛型
所谓泛型是指将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。
印象中大部分书里有关泛型的开篇都是以变量交换或者大小比较开始的,参考了一下钱能:《C++程序设计》这本书,发现在VS2008 下这个例子是通不过的,书中的代码在哪个平台编译的不清楚,但在VS2008下是绝对编译不成功的。会有两个错误提示:
1.swap对重载函数的调用不明确;
2.error C2679: 二进制“<<”: 没有找到接受“std::string”类型的右操作数的运算符(或没有可接受的转换)
第二个错误是cout<<s1 引起的,但使用s1.c_str()却会出现如下的错误:
1 error C3867: “std::basic_string<_Elem,_Traits,_Ax>::c_str”: 函数调用缺少参数列表;请使用“&std::basic_string<_Elem,_Traits,_Ax>::c_str”创建指向成员的指针
对于N年没写过C++代码,二年多来一直搞Web程序的我来说,这个错误解决了足有十分钟才搞定。
第一个错误是因为std命名空间中已经有一个swap方法了,所以开始声明swap泛型方法名称就有冲突了,改掉即可;
第二个错误是由于std::cout没有重<<对string的输出,所以要再包含头文件<string>
看来我要重新定位一下自己了,连最简单的输出都出现了问题,似乎我没理由再忽略C++的一些基础知识了。
改正过的代码:
一直以来有多种语言基础的我认为新学一种语言的时候,语法、流程控制、常变量、循环什么的这些每种语言都有的基础知识就不需要看了,直接向后翻书,学习一下编程思想就行了。但从一个最简单的泛型小程序就让我意识到了这样想是错误的,毕竟看一下基础也不需要太多的时间,根基不扎实到最后没办法建高楼!