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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章