1.size_t无符号整型变量,size_t has not been declared 解决办法加头文件stddef.h
2.expected initializer befor 'a'
当头文件无法完成预处理的时候,就会报这个错误
http://blog.csdn.net/bbplayers/article/details/6457364
没有初始化?将头文件中的导出库宏定义注释掉即可,gcc不需要dllexport
3.__int64 has not been declared
__int64 vc特有的8字节64位有符号整型变量
通过typedef long long int __int64;解决,这里注意这不是宏,所以要加;号
如果其他头文件也需要可以定义ifndef来解决
http://bbs.csdn.net/topics/310135464
http://blog.csdn.net/luxuejuncarl/article/details/1568457
加头文件stdlib、stddef、stdint都没有用
注意long int是32位的
《C和指针》中写过:
long与int:标准只规定long不小于int的长度,int不小于short的长度.
http://bbs.chinaunix.net/thread-1877405-1-1.html
4.纯虚函数定义格式如下
纯虚函数是一种特殊的虚函数,它的一般格式如下: class <类名> { virtual <类型><函数名>(<参数表>)=0; … };
在许多情况下,在基类中不能对虚函数给出有意义有实现,而把它说明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual ReturnType Function()= 0;),则编译器要求在派生类中必须予以重载以实现多态性。同时含有纯虚拟函数的类称为抽象类,它不能生成对象。http://bbs.bccn.net/thread-361400-1-1.htmlhttp://blog.csdn.net/tonywearme/article/details/69792831、多态性 指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。C++支持两种多态性:编译时多态性,运行时多态性。 a.编译时多态性:通过重载函数实现 b 运行时多态性:通过虚函数实现。 2、虚函数 虚函数是在基类中被声明为virtual,并在派生类中重新定义的成员函数,可实现成员函数的动态重载 3、抽象类 包含纯虚函数的类称为抽象类。由于抽象类包含了没有定义的纯虚函数,所以不能定义抽象类的对象群里网友推介一个非常好的免费自学C++的网站,http://www.cppcourse.com/freelist
加油!三个月时间可以做很多事情,相信你可以的!和考研一样!努力!抵得住诱惑耐得住寂寞!规划好,两期!
抽象类不能定义对象,但是抽象类可以定义指针,指针指向派生类
抽象类中定义的指针只能访问纯虚函数和虚函数,其他函数没有访问权限!
Never call virtual functions during construction or destruction:
http://www.cnblogs.com/Pony279/archive/2013/06/04/3117955.html
看到两篇讲虚函数的文章:
http://bbs.bccn.net/thread-361400-1-1.html
http://blog.csdn.net/tonywearme/article/details/6979283
4.Linux下Eclipse编译时,报recompile with -fPIC错误:
http://blog.csdn.net/shenchen8274/article/details/7822822
-fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code),
不用fPIC编译so并不总是不好.
如果你满足以下4个需求/条件:
1.该库可能需要经常更新
2.该库需要非常高的效率(尤其是有很多全局量的使用时)
3.该库并不很大.http://blog.sina.com.cn/s/blog_54f82cc201011op1.html
4.该库基本不需要被多个应用程序共享
http://blog.sina.com.cn/s/blog_54f82cc201011op1.html(正解)
http://blog.csdn.net/bailyzheng/article/details/17613435
http://zhidao.baidu.com/link?url=EYPglPT3EHm1cPvPdaeFGJthgWEze1ZNFQH6erZzZI59uZCAbFEmaKelrQI1fEWjg7uQOnqD-UpucyEkFwTa6a
-f后面跟一些编译选项,PIC是其中一种,表示生成位置无关代码(Position Independent Code)
5.abs(),fabs()函数
template <class T>
inline T& abs(T& a)
{
return a < 0 ? -a : a;
}模板形式的函数自定义
abs();查看了一下gcc的库函数位于stdlib.h(http://blog.163.com/ywx209100@126/blog/static/362968912009814105614924/):
extern int abs(int _x)_THROW _attribute_ ((_const_))_wur;
_THROW为throw()函数的宏定义。_wur是/*ingnore*/的宏定义
throw()是异常直接中断,不会理会外部捕获函数,throw(int)只会捕获int型的异常,http://blog.csdn.net/eclipser1987/article/details/7997286
http://blog.csdn.net/zdl1016/article/details/4204025
vc++中abs()针对整型变量,fabs针对浮点型变量,查看源windows程序参数定义类型为double,故改用fabs(),这个函数在math.h中。
6在C++里Include C的头文件,就需要在原来的.h文件前加个c,并去掉.h;c++头文件include <cstdlib>对应c中的include <stdlib.h>头文件。
string.h cstring.h <string>
http://www.cnblogs.com/Cmpl/archive/2012/01/01/2309710.html
头文件string与string.h的区别
<string>是c++ 的头文件,其内包含了一个string类,string s1就是建立一个string类的对象<string.h> 的c语言的东西 并无类,所以不能 string s1
<cstring>文件实际上只是在一个命名空间std中include了 <string.h>;以前的C的头文件转化为C++的头文件后,有时加上c的前缀表示来自于c,例如cmath就是由math.h变来的。
更加一般的是:
当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用< iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。命名空间std封装的是标准程序库的名称
另外补充一点的是:“”和<>什么时候用:
""首先搜索当前目录,当前目录没有,再搜索头文件的标准目录. <>只搜索头文件的标准目录
7
C++标准库没有提供针对 string 对象的 tolower 函数,
标准库的 tolower 函数是针对单个字符而非针对 string 的,c++者中有一个函数tolower。这个函数是处理字符串的函数。将大写转换成小写.大写是指ABCDEFGHIJKLMNOPQRSTUVMXYZ转换后变成abcdefghijklmnopqrstuvwxyz。非字母字符不做出处理。比如1 2 3 !等字符是以原字符输出的头文件:在VC6.0可以是ctype.h或者stdlib.h。当然这个函数用法有点特殊他是处理字符的,而不是处理字符串的。所谓的不能处理字符串不是说他不能处理字符串,他处理的时候对字符串必须是一个一个字符处理的,不能一次性对字符串进行处理重载一个函数
1
2
3
4
5
6
|
std::string
tolower
( std::string str )
{
for
(unsigned i = 0; i < str.length(); i++)
str[i] = std::
tolower
(str[i]);
return
str;
}
|
8函数名加括号是为了防止宏扩展http://blog.csdn.net/simonjay2007/article/details/7406795
函数返回值可以是一个函数对象http://www.douban.com/group/topic/13717915/?cid=154376451(还是不太理解函数参数的问题?),闭包形式:http://baike.baidu.com/link?url=Vz7YSkauS_2z0JuM7vBsZOYDrGdB-Ws5XSAYO-BeHryuNKvzNB5QaUjIAJIsAfapORqsCfEJ-kqSGcTXthMAAK
“transform(s.begin(),s.end(),s.begin(),tolower)” can't be complied successfully?