error LNK2019: 没有包含头文件,或者没有定义函数,或者没有导入库。
还有种,当创建一个项目A后,同时生成解决方案后,在此项目上又删除了.H和.CPP文件,重新创建其他的.H和.CPP文件后,再运行也可能出错,因为之前生成A后会在Debug下产生某些文件,可能对这次新的生成文件产生影响。要这样,必须重新生成解决方案!!!!!
错误 1 error C2143: 语法错误 : 缺少“;”(在“&”的前面)
错误 2 error C2433: “ostream”: 不允许在数据声明中使用“friend”
错误 3 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
这些都是一个错误,;之前的那个变量没有被定义,在这里就是ostream,所以加入<ostream.h>就可以了
错误 4 error C2248: “std::basic_ios<_Elem,_Traits>::basic_ios”: 无法访问 private 成员(在“std::basic_ios<_Elem,_Traits>”类中声明) c:\program files (x86)\microsoft visual studio 10.0\vc\include\fstream 890-------------解决方案:istream(ostream)的拷贝构造函数被申明为私有的,使用istream,ostream做参数传递时要使用引用,防止调用拷贝构造函数
ifstream、ofstream这两个类的都间接继承自模板类basic_ios<xxx>的类实例,看一下basic_ios的源代码就一目了然了:
private:
__CLR_OR_THIS_CALL basic_ios(const _Myt&); // not defined
_Myt& __CLR_OR_THIS_CALL operator=(const _Myt&); // not defined
basic_ios<xxx>的复制构造函数、赋值构造函数均为私有函数并且没有任何实现,ifstream/ofstream的间接父类没有复制构造函数的实现,那么调用复制构造函数还会成功么?当然不会
总之,流不可复制从流的祖先basic_ios就已经开始了。
错误5 if (this->_Myres < _Newsize)
_Copy(_Newsize, this->_Mysize); // reallocate to grow
若在调试的时候出现此bug,可能错误及其解决方案为:若结构体A中存在指向另一个结构体B的指针,在对A动态申请内存时,B也需要动态申请内存,否则出现此bug。
亲身体会,花了一个多小时才解决
错误6 我用循环的方式从二进制文件中循环读取结构体对象信息,用if(fin.eof())break;跳出循环,但在之后,我发现如果再使用这个fin.open()函数打开另一个二进制文件时,文件指针仍然指向着文件末尾,再读入只能读入空字符,即使采用fin.seekg(ios::beg)语句也不行。求高手帮我解决一下这个问题。
(我用的VC++6.0环境,不要告诉我再建立一个新的对象,因为我试过那样一定是正确的,而且如果不用if(fin.eof())break;跳出循环也不会读出空字符,我只是想知道能不能将已经指向文件结尾的对象再定义到文件头)
解决方案:fstream对象如果重复使用,须注意在使用之前先调用clear函数,否则会出错
fin.clear(); //重新打开文件前,先clear,再open
在open成功后不会对 fstream中状态进行操作,而open失败的话会设置_MyState为failbit,并且在close操作时如果本身是空文件,也会设置state为failbit,这样造成一次失败之后的其他很多操作都是失败的,因为很多fstream操作会先判断state;
而clear函数是将fstream状态重置为goodbit
参考文章:
http://blog.csdn.net/t_w_s/article/details/8992686
http://bbs.csdn.net/topics/390184153