3

ファイルから整数を読み取ってbool変数をそれに等しくしようとすると、MSVC++で警告が表示されます。

accessLV[i] = FileRead(file1, i + 1);

(accessLVはboolの配列であり、FileReadは、ファイルからの読み取りに関連する構文を減らすために作成した関数です。これは、ステートメントがforループ内にあるためです)

static_castを使用してみました:

accessLV[i] = static_cast<bool>(FileRead(file1, i + 1));

しかし、それでも警告が表示されます。私はこれをやってみました(正確な用語はわかりません):

accessLV[i] = (bool)FileRead(file1, i + 1));

そして、警告はまだそこにあります。accessLVをintの配列にせずに警告を取り除く方法はありますか?

注意:これが役立つ場合は、FileReadの構文です。

int FileRead(std::fstream& file, int pos)
{
    int data;
    file.seekg(file.beg + pos * sizeof(int));
    file.read(reinterpret_cast<char*>(&data), sizeof(data));
    return data;
}
4

4 に答える 4

8

どうですか

accessLV[i] = FileRead(file1, i + 1) != 0;
于 2009-05-30T01:56:48.477 に答える
3

あなたがしたいことは基本的にです

accessLV [i] =(FileRead(file1、i + 1)!= 0)

于 2009-05-30T01:56:55.497 に答える
2
accessLV[i] = FileRead(file1, i + 1) != 0;

上記では、int から bool にキャストしていました。これを使用すると、比較の結果が accessLV[i] に格納されるため、型警告は発生しません。

于 2009-05-30T02:19:39.287 に答える
2

他のポスターが示唆しているように、!=0必要なものです。より読みやすいので、このようなラッパーを好みます。

// myutil.hpp
template< typename T >
inline bool bool_cast( const T & t ) { return t != 0; }

この場合、次のように使用します。

// yourcode.cpp
accessLV[ i ] = bool_cast( FileRead( file1, i + 1 ) );

この関連する質問には、役に立つと思われる追加の議論があります。

于 2009-05-30T02:45:23.493 に答える