#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; }
скажите, пожалуйста, почему компилятор не печатает {Вы не можете установить отрицательное число голода}
sethunger должен возвращать строку и не выводить. Или ваш главный не должен пытаться напечатать эту функцию ... – alkino
Вы не можете просто заменить возвращаемый тип 'void' на' int', а затем ничего не вернуть. Это бессмысленно. – chris
Я думаю, вы хотите «отладить-распечатать» тот факт, что вы сейчас вызываете функцию и не нужно печатать какое-либо возвращаемое значение (потому что его нет). Либо вы просто пишете вызов во второй строке без вывода, либо можете взломать: 'cout <<" ... "<< (crit.setunger (-1)," ") << endl;' - Объяснение : в круглых скобках вы сначала вызываете функцию (отбрасывая любое возвращаемое значение, которое здесь даже не существует). Затем (после запятой) вы предоставляете что-то, что можно напечатать (пустая строка). – leemes