在RHEL 5.0上編譯用C++編寫的程序包時。我收到以下錯誤。編譯C++代碼時發生錯誤ios :: nocreate
>錯誤:nocreate
不是std::ios
的源代碼對應於構件:
ifstream tempStr(
argv[4]
,ios::in
|ios::nocreate
);
我試圖
#g++ -O -Wno-deprecated <file.cpp> -o <file>
以及:
#g++ -O -o <file>
請提出解決方案。
在RHEL 5.0上編譯用C++編寫的程序包時。我收到以下錯誤。編譯C++代碼時發生錯誤ios :: nocreate
>錯誤:nocreate
不是std::ios
的源代碼對應於構件:
ifstream tempStr(
argv[4]
,ios::in
|ios::nocreate
);
我試圖
#g++ -O -Wno-deprecated <file.cpp> -o <file>
以及:
#g++ -O -o <file>
請提出解決方案。
ios::nocreate
不是標準C++的一部分 - 你期望它做什麼?
編輯:從谷歌,它似乎是爲了防止文件被創建,如果它不存在。這是ifstreams默認的,所以你可以只說:
ifstream f(filename);
if (! f.is_open()) {
// open failed - probably because infput file does not exist
}
打開以讀模式(ios::in
)的文件,如果不存在,也不會創建它。你可以放棄非標準的nocreate
。而且,由於in
是ifstream
默認:
ifstream tempStr (argv[4]);
可以使用的fopen和O_CREAT打開該文件作爲一個文件句柄| O_EXCL,然後用它轉換成流
__gnu_cxx::stdio_filebuf<char> filebuf(posix_handle, std::ios::out);
ostream os(&filebuf);
此使用非標準擴展定義在。 如果有人有更好的解決方案,我真的想知道!
我正在構建一個開源軟件包,並且此錯誤正在拋出。他們沒有太多的支持,因此想知道。 – 2009-06-30 10:28:13
「ios :: nocreate不是標準C++的一部分 - 你期望它做什麼?」 - 認真嗎? – jww 2014-02-16 20:14:12