삽질 – 003 :: 파일오픈시 플래그값 에러

file.open(strFilename.c_str(), ios::out || ios::trunc);
에 따른 에러코드

no matching function for call to `
std::basic_fstream >::open(const char*, bool)’
/usr/include/c++/3.2.2/fstream:557: candidates are: void
std::basic_fstream<_CharT, _Traits>::open(const char*, std::_Ios_Openmode =
(std::ios_base::in | std::ios_base::out)) [with _CharT = char, _Traits =
std::char_traits]

틀린게 없어 보이지만…(나는 없어 보였다.. T_T)
ios::out || ios::trunc 의 결과는 bool 값이 된다. || 가 or 연산자이기 때문이다.

VC++ 7.0 warnning level 3 에서는 문제없이 컴파일 된다. bool 로 나온값을 어떻게 처리하는지는 모르겠다. 자동으로 32bit 데이타 타입으로 변환되고 그값이 다시 그 플래그 값으로 변환이 되는게 아닐까 한다.

저 코드는

file.open(strFilename.c_str(), ios::out | ios::trunc);

으로 수정해서 비트연산을 하게 해줘야 된다.
후….이건 정말 삽질에 어울리는 포스팅인듯..(이른바 주옥같은 삽질들)

나와 같은 삽질을 하고 그에 대한 답을 준 사람들
http://www.spinics.net/lists/gcchelp/msg05558.html

마틴에게 감사를…
Thx Martin

ps.
왜 틀렸는지 알고 나서 보면.. 저 위의 에러코드에 답이 들어있다.
….젠장!

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다