2013-04-18 5 views
0

일부 오류 입력 처리가 주어진 클래스가 있습니다. 그것은 자신에게 "추출"연산자가 주어졌으며 주어진 코드를 구현하도록 요청 받았습니다. 내가 가지고있는 문제는 내가 사용해야하는 코드가 이와 비슷하게 보인다는 것입니다.C++ 오류 처리 반환 값 오류가 반환되었습니다.

try { 
    while (some condition) 
    {....implemented code....} 
} catch (runtime_error& e) { 
    cerr << e.what() << endl; 
    return 1; 
} 

나는이 그것을 좋아하지 않는 것입니다 컴파일하는 데 문제는 IT 나에게의 오류 제공 값 "1을 반환"나는 그것이 컴파일 반환 값을 제거하면

invalid initialization of non-const reference of type ‘std::istream& {aka std::basic_istream<char>&}’ from an rvalue of type ‘int’ 

을 직선이지만 프로그램이 try 문을 수행하려는 영역에 도달하면 프로그램이 실행되지 않습니다. 위에서 언급했듯이 위 코드는 우리가 구현해야하는 예제 코드입니다. 그래서 작동 할 것이라고 생각했습니다. 내가 어떤 이유로 실패 할 때까지 입력을 받고 유지하려는 것 가정으로 while 루프에 대한 나의 조건은

while (!std::cin.fail()) 

했다. 이 경우 리턴 값이 왜 문제가되는 것입니까?

+1

형태

std::istream& func_name(/*parameter list goes here*/) 

따라서 컴파일 오류의 서명이 있습니다. 그리고 나는 범위를 벗어나는 변수가 아니라 참조를 의미합니다. – chris

+0

while 루프를 간단하게 만들 수 있습니다 :'while (std :: cin)'- 위와 같은 의미이지만 8 문자 이하로 입력하십시오. –

답변

1

심령 디버깅을 나타냅니다

당신의 바깥 기능 당신은`IStream을 &을`반환해야

+0

그렇습니다. 그러나 try와 catch가 여전히 해당 메서드에 있어야합니다. 이 인스턴스에서 1은 자리 표시 자라고 가정하고 함수에 전달한 istream로 바꾸어야합니다. – Scott

+0

@gRnt 아니요 1은 자리 표시자가 아닙니다. 스트림 참조를 반환하는 모든 함수 AFAIK는 항상 * 같은 * istream 객체를 반환하며 * 객체는 그 자체가 매개 변수이며 로컬 객체는 아닙니다. –

+0

EDIT : 이제 샘플 출력을 살펴보면 프로그램이 숫자 1을 내뱉었다 고 생각합니다. 결과를 표시하는 대신 특정 오류가 발생하면 숫자 1이 표시되고 cerr을 통해 오류가 나옵니다 . 이 작업을 수행하는 방법을 모르지만 계속 읽습니다. – Scott