2014-09-15 8 views
-3
#include <iostream> 

using namespace std; 


    class critter{ 
    public : // public section 
      critter (int hunger =0) ; 
     int gethunger() const ; 
     void sethunger (int hunger) ; 
    private : 
     int m_hunger ; 

    }; 

    critter :: critter (int hunger) : 
     m_hunger (hunger) 
     { 
      cout << "new critter has been born" << endl ; 
     } 
int critter :: gethunger() const 
    { 
     return m_hunger ; 
    } 

    void critter :: sethunger (int hunger) 
    { 
     if (hunger<0) { 
      cout << "you can not set a negative number to hunger" << endl ; 

     } 
else { 
    m_hunger=hunger ; 
} 
    } 
    int main() 
    { 

     critter crit(5); 
      cout << "calling gethunger()"<<crit.gethunger()<<endl ; 

      cout << "calling sethunger()" << crit.sethunger(-1) << endl ; 
      return 0 ; 

    } 

나는 다음과 같은 오류가 점점 오전 : 에 대한 일치하지 않습니다'표준 : : 연산자 < <> ((* & 표준 '에서'연산자 < < :: COUT)이 라인 ((CONST 숯 *) "를 호출 sethunger()")) < < crit.critter :: sethunger (-1) "에 대한 일치하지 않습니다 '연산자 <<'에서 '표준 : : 운영자

:

{< < COUT"호출 sethunger() "< < crit.sethu nger (-1) < < endl; } 컴파일러가 인쇄되지 않는 이유

말해 주시기 바랍니다 {당신은

+0

sethunger는 문자열을 반환하고 출력을 반환해야합니다. 아니면 당신의 main 함수는이 함수를 출력하려고해서는 안된다 ... – alkino

+2

'void' 리턴 타입을'int'로 대체 한 다음 아무 것도 리턴 할 수 없다. 그건 말이 안돼. – chris

+0

"함수를 호출하고 반환 값을 인쇄 할 필요가 없다는 사실을"디버그 - 인쇄 "하고 싶습니다 (아무 것도 없기 때문에). 출력없이 두 번째 행에 호출을 작성하거나 다음과 같이 해킹 할 수 있습니다. "cout <<"... "<< (crit.sethunger (-1)," ") << endl;'- 설명 : 괄호 안에는 먼저 함수를 호출합니다 (여기에는 존재하지 않는 반환 값은 무시됩니다). 그런 다음 (쉼표 뒤에) 인쇄 할 수있는 것을 제공합니다 (빈 문자열). – leemes

답변

0
cout << "calling sethunger()" << crit.sethunger(-1) << endl ; 

sethunger() 멤버 함수는 무효을 반환} 굶주림에 음수를 설정할 수 없습니다. 물론 std::cout에 공백을 쓸 수 없습니다.

+1

OP는 이미 질문에서 이렇게 말했습니다. "내 생각에 오류가 컴파일러는 ostream에 void를 삽입하는 방법을 모릅니다. " – indiv

+0

이 코드가 작동하고 메시지를 인쇄하는 데 도움이됩니다. –

+0

"이 코드를 작동시킬 수있는 사람 "이 전 세계에 있습니다. 그게 너야. 오직 당신이해야 할 일을 알고 있습니다. 이 특정 오류 메시지의 원인이 설명되었습니다. std :: ostream은 void에 오버로드되지 않습니다. 이제, 대신에 일어날 일을 파악하고 코드를 그에 따라 변경해야합니다. –

2

귀하의 추측은 맞습니다 : void은 인쇄 할 수 없습니다. 컴파일러가 인쇄되지 않는 이유 말해주십시오

{당신이 굶주림에 음수를 설정할 수 없습니다} : 당신의 갱신에 관한

cout << "calling sethunger()" << endl; 
crit.sethunger(-1); 

: 당신이해야 할 것은 당신이 메시지를 인쇄 한 후 sethunger()를 호출하는 것입니다

작성한 메시지는 컴파일러에서 인쇄하지 않으며 컴파일 된 프로그램으로 인쇄됩니다. 코드가 컴파일되지 않는 한 메시지를 작성할 수있는 프로그램이 없습니다.

+0

이 코드가 작동하고 메시지를 인쇄하도록 도와주세요. –

+0

@GzatShrit 업데이트보기 –

관련 문제