C++之 fstream open函數( error: no matching function for call to ‘std::basic_ifstream::open(const)

C++之 fstream open函數( error: no matching function for call to ‘std::basic_ifstream::open(const)

C++使用fstream進行文件讀寫,非常的方便,但是在日常使用的時候,常常會忽視掉一些小問題,如下:
類定義爲:
在這裏插入圖片描述
出現的問題的open函數:
在這裏插入圖片描述
報錯爲:
在這裏插入圖片描述但是看上去確實沒什麼問題,看官方文檔:
在這裏插入圖片描述
可以看出,fstream::open有兩種重載方式:

open( const char* filename, ios_base::openmode mode=ios_base::in | ios_base::out);(可以看出這種寫法明顯是爲了兼容C的寫法。);
open( const string& filename, ios_base::openmode = ios_base::in | ios_base::out);

可以看到open函數是打開由參數filename標識的文件,將其與流對象相關聯,以便對其內容執行輸入/輸出操作。參數mode指定文件打開的模式。
所以大概可判斷是filename形式出現了問題。

接着看open函數的參數:
在這裏插入圖片描述
可以看到,上面出問題的地方就在於filename;即filename是要打開的文件名的字符串。 其格式和有效性的細節取決於庫的實現和運行環境。
所以,在windows下,不同的編譯器,devcpp或者是codeblocks,或者是在linux平臺,不同的gcc,均有可能出現問題,所以當直接使用string作爲輸入時出現問題,是因爲編譯器需要輸入的是char 數組類型的filename,所以,我們可修改爲:
在這裏插入圖片描述
問題解決,順利通過編譯!

發佈了155 篇原創文章 · 獲贊 22 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章