2011-09-13 4 views
2

ostream을 전달하는 함수가 있습니다. ostream이 제대로 작동하는지 테스트해야합니다. catch 문을 사용하여 try 블록에 print 문을 두어 모든 예외를 catch합니다. 이제 이것이 작동하는지 테스트 해보고, 함수를 전달하기 위해 나쁜 ostream을 만드는 데 약간의 도움이 필요합니다.함수에 전달 된 ostream을 테스트하는 방법에 대한 도움말/조언이 필요합니다.

filebuf buffer; 
ostream& out = ostream(&buffer); 
test1.print(out); 

하지만 난 그것을 테스트 할 때, 난 내 오류 메시지가 인쇄 할 수 없습니다

나는이 시도. 함수에 전달할 잘못된 ostream을 만드는 더 좋은 방법은 무엇입니까?

또한 try-catch 블록을 사용하는 것보다 ostream을 확인하는 더 좋은 방법이 있습니까?

+0

무엇을 확인 하시겠습니까? "나쁜"을 정의하십시오. 어떤 종류의 오류 메시지입니까? –

+1

ostream.bad()는 스트림 상태를 알려줍니다. –

+2

'bad'는 실패 비트를 검사하지 않으므로 유용하지 않습니다. –

답변

2

어떤 파일에도 열려 있지 않은 ofstream은 어떻습니까?

+0

이 답변입니까? – iammilind

+1

@ iammilind : "함수에 전달할 잘못된 ostream을 만드는 더 좋은 방법은 무엇입니까?"라고 대답합니다. 개인적으로 나는 이것이 질문의 가장 긴급한 부분이라고 생각하지 않았다 :-) –

+0

@ 스티브 : 질문의 유일한 다른 부분은 마지막 줄에있는 "또한"부록이다. 나는 무시하려고했다. –

2

스트림은 일반적으로 작동하지 않을 때 예외를 throw하지 않으므로 작업 성공 여부와 상관없이 오류 메시지가 인쇄되지 않을 것으로 기대됩니다.

ios 기본 클래스는이를 제어하는 ​​데 사용할 수있는 exceptions이라는 기능을 가지고 있지만 그와 같은 인수 상태를 변경하는 함수를 작성하는 것은 상당히 반 사회적입니다. 따라서 복원해야 할 수도 있습니다 (예외가 발생하더라도 ...)

스트림에서 연산의 성공 여부를 테스트하는 일반적인 방법은 if입니다. 모든 것이 정상이라면 스트림은 참값으로 평가되고 그렇지 않으면 거짓 값이됩니다. 즉, booltrue 또는 false이 아닌 조건부 값이 참/거짓 인 값을 의미합니다.

정확히 말해 failbit 또는 badbit이 설정되면 false입니다. 마지막 작업은 그 중 하나 이상이 설정된 경우에만 "작동하지 않았습니다".

+0

젠장, 오늘은 천천히 해요. –

+1

+ 상상의 0.5 포인트, Tomalak의 대답과 결합하면 - 우리는 완전한 답을 얻었습니다! :) – Nim

+0

감사합니다, 시도한 후 failbit 확인 시도 출력 및 내 오류 메시지가 트리거 된 – DFord

관련 문제