【发布时间】:2014-09-15 23:55:21
【问题描述】:
#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 ;
}
我收到以下错误: 'std::operator((* & std::cout), ((const char*)"calling sethunger ()") 中的 'operator
在这一行:
{cout
请告诉我为什么编译器不打印{you can not set a negative number to hang}
【问题讨论】:
-
sethunger 应该返回一个字符串并且没有输出。或者你的 main 不应该尝试打印这个函数......
-
您不能只用
int替换void返回类型,然后什么都不返回。这没有任何意义。 -
我猜您想“调试打印”您现在正在调用该函数并且不需要打印任何返回值的事实(因为没有任何返回值)。您可以简单地在第二行中编写调用而没有任何输出,或者您可以破解:
cout << "..." << (crit.sethunger(-1), "") << endl;-- 说明:在括号内,您首先调用该函数(丢弃此处甚至不存在的任何返回值)。然后(在逗号之后)提供可以打印的内容(空字符串)。 -
您通过打印
crit.sethunger(-1)的返回值到底想完成什么?也许如果你能解释你想要做什么,它会帮助别人为你提供一个很好的答案。 -
@indiv 我猜他认为他需要将其写入
cout才能看到sethunger可能生成的错误消息。但这是一个错误的假设。 (但如果它以字符串形式返回错误就会出现这种情况)