不匹配'operator<<'在'std :: operator中

时间:2014-09-15 23:55:21

标签: c++ class oop

#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 ;

    }

我收到以下错误: 不匹配'operator&lt;&lt;'在'std :: operator&lt;&lt; &gt;((*&amp; std :: cout),((const char *)“call sethunger()”))&lt;&lt; crit.critter :: sethunger(-1)'

在这一行:

{cout&lt;&lt; “call sethunger()”&lt;&lt; crit.sethunger(-1)&lt;&lt;结束}

请告诉我为什么编译器不打印{你不能设置负数来饥饿}

2 个答案:

答案 0 :(得分:2)

您的猜测是正确的:void无法打印。您应该做的是在打印消息后致电sethunger()

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

关于您的更新: 请告诉我为什么编译器不打印{你不能设置负数来饥饿}

编写的消息不会由编译器打印,它们由编译的程序打印。只要您的代码无法编译,就没有可以编写消息的程序。

答案 1 :(得分:0)

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

sethunger()成员函数返回一个void。当然,不能在std::cout上写空。