vs2010 一些error类型及其解决方案

error C2872: 'cout' : ambiguous symbol:模糊不清的标记 :可能cout被定义了多次

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值