次のファイルを開いて読み取ります。ただし、ファイルが正常に開かれたことを確認したいので、フラグが設定されているかどうかを確認するために失敗を使用しています。ただし、次のエラーが発生し続けます。
私はCから来ているので、C++は初めてです。そのため、このエラーを理解できません。
オブジェクトなしではメンバー関数「bool std :: basic_ios <_CharT、_Traits> :: fail()const [with _CharT = char、_Traits = std :: char_traits]」を呼び出せません
コード:
int devices::open_file(std::string _file_name)
{
ifstream input_stream;
input_stream.open(_file_name.c_str(), ios::in);
if(ios::fail() == true) {
return -1;
}
file_name = _file_name;
return 0;
}
あなたは単にこれを行うことができます:
_int devices::open_file(std::string _file_name)
{
ifstream input_stream;
input_stream.open(_file_name.c_str(), ios::in);
if(!input_stream)
{
return -1;
}
file_name = _file_name;
return 0;
}
_
fail()は静的メソッドではないため、型ではなくインスタンスで呼び出す必要があるため、fail()を使用する場合は、上記のコードで_!input_stream
_をinput_stream.fail()
に置き換えます。
ここで何を成し遂げようとしているのか不思議に思う必要があります。ファイルを開いて、すぐに再び閉じます。ファイルが存在するかどうかを確認しようとしているだけですか?
エラーは、ios::fail()
が実際にメンバーメソッドであるときに静的メソッドとして使用しているためです。
if (input_stream.fail())
{
...
}
std::ifstream::is_open
を使用することもできます。ファイルが開いていて、このストリームオブジェクトに関連付けられている場合はtrueを返します。
// ifstream::is_open
#include <iostream> // std::cout
#include <fstream> // std::ifstream
int main () {
std::ifstream ifs ("test.txt");
if (ifs.is_open()) {
// print file:
char c = ifs.get();
while (ifs.good()) {
std::cout << c;
c = ifs.get();
}
}
else {
// show message:
std::cout << "Error opening file";
}
return 0;
}
http://www.cplusplus.com/reference/fstream/ifstream/is_open/
ストリームオブジェクトでfail()を呼び出す必要があります。これを行うより慣用的な方法は次のとおりです。
input_stream.open(_file_name.c_str(), ios::in);
if( ! input_stream ) {
return -1;
}