·c++程序代码的基本形式:
c++文用include使用头文件。
用<>包括标准库。
用””包括自定义头文件。
·Guard(防卫式声明):
#ifndef _COMPLEX_
#define _COMPLEX_
.
.
#endif
只有未被定义的COMPLEX(自己取的名称)才会被定义
当第二次被定义时会跳过。
·类:
1带指针
2不带指针。多半不用析构函数。
·singleton:单键,单例。
·同一个class各个对象互为友元。
·左值L-value中的L指的是Location,表示可寻址。
右值R-value中的R指的是Read,表示可读。
写作业的一些问题:
1.error: expected constructor, destructor, or type conversion before '(' token|
srand((unsigned)time(NULL));应该写在main内或函数中。
2.Date *date=CreatePoints(d);
date指向一个大小为10的数组,因为数组名本身就是一个常量地址,所以后面date[i].print();可以不用再date前加 *。
</br>
<br />
前几天写课程设计的一些问题和报错:
·在重载运算函数中无法直接初始化引用的类,只能另写get函数赋值。
·运用fstream刚开始分不清程序和txt之间的读入读出,出了很多错误。
·读取txt文档信息时,本想用seekg()函数,但是无法按行跳过,只能用getline逐行读取。
·修改用了一个比较笨的方法,读取文件,存入vector<string>,关闭文件,修改vector,用ios::out清空文件,存入vector。
·warning C4786: (只在vc6.0中报错)
解决方法有两种,一种是直接定义别名:
#ifdef _DEBUG
#define VeryLongClassNameA A
#define VeryLongClassNameB B
#endif
另一种是屏蔽4786warning:
#pragma warning(disable : 4786)
·使用vc6.0时,文件不能正确读取,而在vs2015和codeblocks中正常,怀疑是vc6.0中ofstream和其他编译器不同,后发现ifstream后标记符为ios::app,改正后正常。
·change函数不能输出到文件,调错了很长时间才发现是最后的save函数覆盖掉了。
权衡了一下,把save函数删掉了。
·Find函数中,如果把if条件换成string1==string2,就会报错,关于堆栈方面的。后来想到了比较函数string1.compare(string2),问题解决。但不知道为什么会出现这种错误。
·读取文件夹下文件列表。照着下面的学习了一下,但我删掉了判断文件夹的部分,加入了创建文件夹部分。
void getAllFiles(string path, vector<string>& files) {
//文件句柄
long hFile = 0;
//文件信息
struct _finddata_t fileinfo; //很少用的文件信息读取结构
string p; //string类很有意思的一个赋值函数:assign(),有很多重载版本
if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) != -1) {
do {
if ((fileinfo.attrib & _A_SUBDIR)) { //比较文件类型是否是文件夹
if (strcmp(fileinfo.name,".") != 0 && strcmp(fileinfo.name,"..") != 0) {
files.push_back(p.assign(path).append("\\").append(fileinfo.name));
getFilesall(p.assign(path).append("\\").append(fileinfo.name), files);
}
} else {
files.push_back(p.assign(path).append("\\").append(fileinfo.name));
}
} while (_findnext(hFile, &fileinfo) == 0); //寻找下一个,成功返回0,否则-1
_findclose(hFile);
}
}
部分报错:
1.vector<string> read(peccancy &l);报错
2.error: ambiguating new declaration of 'std::vector<std::basic_string<char> > read(peccancy&)'|
二义性,read前加&引用。
3.for(vector<string>::iterator iter=str.begin(); iter!=str.end(); iter++)原来缺少”!”报错。
4.rename(oldadd.c_str(),newadd.c_str());原型rename(char ,char ),不能直接传string
应该使用.c_str()函数转化为const char。
5.cin.getline() 原型为cin.getline(const char ,streamsize n ) 无法传入string形参,
换用string::getline()。
error: no matching function for call to 'std::basic_ifstream<char>::getline(std::string&, int)'|
6.个别if判断字符用了””,报错。
error: ISO C++ forbids comparison between pointer and integer [-fpermissive]|
7头文件在include时重复定义(multiple definition of)
为了方便循环使用吧int i,j;放在头文件里,出现问题。
解决:删除,在函数中重新定义。