2014-09-15 3 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 ; 

    } 

Я получаю следующее сообщение об ошибке: нет матч для„оператора < <“в» станд :: оператор < <> ((* & станд :: соиЬ), ((Const символ *) "вызова sethunger()")) < < crit.critter :: sethunger (-1)»не тягаться с «оператора <<» в «станд :: оператор

в этой строке:

{соиЬ < <«вызова sethunger() "< < crit.sethu nger (-1) < < endl; }

скажите, пожалуйста, почему компилятор не печатает {Вы не можете установить отрицательное число голода}

+0

sethunger должен возвращать строку и не выводить. Или ваш главный не должен пытаться напечатать эту функцию ... – alkino

+2

Вы не можете просто заменить возвращаемый тип 'void' на' int', а затем ничего не вернуть. Это бессмысленно. – chris

+0

Я думаю, вы хотите «отладить-распечатать» тот факт, что вы сейчас вызываете функцию и не нужно печатать какое-либо возвращаемое значение (потому что его нет). Либо вы просто пишете вызов во второй строке без вывода, либо можете взломать: 'cout <<" ... "<< (crit.setunger (-1)," ") << endl;' - Объяснение : в круглых скобках вы сначала вызываете функцию (отбрасывая любое возвращаемое значение, которое здесь даже не существует). Затем (после запятой) вы предоставляете что-то, что можно напечатать (пустая строка). – leemes

ответ

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

Функция член sethunger() возвращает пустоту. Невозможно написать void на std::cout, конечно.

+1

ОП уже сказал об этом в вопросе: «И я предполагаю, что ошибка говорит мне, что компилятор не знает, как вставить пустоту в ostream » – indiv

+0

помогите мне только для того, чтобы этот код работал и печатал сообщения. –

+0

В этом мире есть только один человек, который может« заставить этот код работать ». Это ты. Только вы знаете, что он должен делать. Причина этого конкретного сообщения об ошибке была объяснена вам. std :: ostream не перегружает пустоту. Теперь вам нужно выяснить, что должно произойти, вместо этого, и изменить код соответственно. –

2

Ваша догадка правильная: void не распечатывается. То, что вы должны сделать, это позвонить sethunger() после печати сообщений:

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

Что касается вашего обновления: пожалуйста, скажите мне, почему компилятор не печатает {Вы не можете установить отрицательное число для голода}

Сообщения, которые вы пишете, не распечатываются компилятором, они печатаются скомпилированной программой. И пока ваш код не компилируется, нет программы, которая может написать сообщение.

+0

помогите мне только для того, чтобы этот код работал и распечатывал сообщения –

+0

@GzatShrit посмотреть обновление –

Смежные вопросы