2009-05-30 3 views
3

파일에서 정수를 읽고 bool 변수를 같게하려고하면 MSVC++에서 경고 메시지가 나타납니다.C++에서 int-to-bool 경고를 어떻게 해결할 수 있습니까?

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

(accessLV가 bools 배열이다 FILEREAD는 I 파일로부터의 판독에 관련된 문법을 감소하게 함수 인 문장이 for 루프 내 때문에하다) I는했습니다

static_cast를 사용해 보았습니다 :

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

그러나 경고 메시지가 계속 나타납니다. 나는이 작업을 시도했다. 정확한 용어는 확실하지 않다.

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

그리고 경고는 여전히 존재한다. 어쨌든 accessLV int 배열을 만들지 않고 경고를 제거 할 수 있습니까?

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; 
} 

답변

8

싶은 것은 기본적으로

accessLV하는 방법에 대한

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

()의 추가 세트는 우선 순위가 어디에 있는지 표시하기 위해 거기에 빠져들지 않습니다! –

3

은 [I] = (:

주의 : 도움이된다면 이것은 FILEREAD의 구문입니다 FileRead (file1, i + 1)! = 0)

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

위의 경우 int에서 bool로 캐스팅했습니다.이 값을 사용하면 비교 결과가 accessLV [i]에 저장되므로 유형 경고가 발생하지 않습니다.

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)); 

This related question가 추가 논의가 유용한 찾을 수 있습니다 내가 더 읽기 찾을 수 있기 때문에이 같은 래퍼를 선호합니다.

관련 문제