运算符<<重载“错误:传递'const ....”

ofstream& operator<<(ostream &outStream, const EventClass &eventObject)
{
  outStream << eventObject.getEventName() << " event at "
    << eventObject.getEventTime() << endl;

  return(outStream);
}

我相信这段代码足以分析错误。

当我编译我的代码时,出现以下错误:

错误:作为'std :: string EventClass :: getEventName()'的'this'参数传递'const EventClass'丢弃限定符[-fpermissive]
outStream << eventObject.getEventName()<<“event at”

错误:将'const EventClass'作为'int'的参数传递给'int EventClass :: getEventTime()'丢弃限定符[-fpermissive]
<< eventObject.getEventTime()<< endl;

错误:类型'std :: ofstream&{aka std :: basic_ofstream&''从std :: ostream {aka std :: basic_ostream}'表达式的引用无效初始化'
回报(outStream);

任何想法如何解决这些错误?


您需要确保getEventNamegetEventTime声明为const ,如下所示:

std::string getEventName() const;
int getEventTime() const;

EventClass的声明和实现中。 这告诉编译器这些方法不会以任何方式修改对象的字段。

另外,运营商的最后一行应该是: return outStream;

编辑:也std::ofstream是不一样的std::ostream 。 通常,对于operator<< ,它需要定义为:

std::ostream& operator<<(std::ostream& os, const EventClass& eventObject) { 
    //blah 
}

包含任何流类型。


eventObject是对const对象的引用,所以它的getEventName()getEventTime()方法也需要声明为const ,以指定它们不会修改它们被调用的对象,例如:

std::string getEventName() const;
int getEventName() const;

另外,你的运算符被声明为返回一个ofstream ,但它需要返回一个ostream来匹配输入:

ostream& operator<<(ostream &outStream, const EventClass &eventObject)
链接地址: http://www.djcxy.com/p/73069.html

上一篇: operator<< overloading "error: passing 'const...."

下一篇: How to use strongly typed enums