运营商LT;<重载“错误:传递'const ....”

时间:2016-04-06 23:45:49

标签: c++ operator-overloading

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

  return(outStream);
}

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

编译代码时,我收到以下错误:

  

错误:将'const EventClass'作为'this'参数传递给'std :: string EventClass :: getEventName()',丢弃限定符[-fpermissive]   
    outStream&lt;&lt; eventObject.getEventName()&lt;&lt; “活动在”

     

错误:将'const EventClass'作为'int EventClass :: getEventTime()'的'this'参数传递,丢弃限定符[-fpermissive]   
      &LT;&LT; eventObject.getEventTime()&lt;&lt; ENDL;

     

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

如何解决这些错误?

2 个答案:

答案 0 :(得分:3)

您需要确保将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 
}

包含任何流类型。

答案 1 :(得分:0)

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

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

此外,您的运算符被声明为返回ofstream,但它需要返回ostream,以匹配输入:

ostream& operator<<(ostream &outStream, const EventClass &eventObject)