operator<< overloading "error: passing 'const...."

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

  return(outStream);
}

I believe this snippet is sufficient to analyze the error.

When I compile my code I get the following errors:

error: passing 'const EventClass' as 'this' argument of 'std::string EventClass::getEventName()' discards qualifiers [-fpermissive]
outStream << eventObject.getEventName() << " event at "

error: passing 'const EventClass' as 'this' argument of 'int EventClass::getEventTime()' discards qualifiers [-fpermissive]
<< eventObject.getEventTime() << endl;

error: invalid initialization of reference of type 'std::ofstream& {aka std::basic_ofstream&}' from expression of type 'std::ostream {aka std::basic_ostream}'
return(outStream);

Any ideas how to solve these errors?


You need to make sure getEventName and getEventTime are declared as const , as follows:

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

in the declaration and implementation of EventClass . This tells the compiler that these methods will not modify the fields of the object in any way.

Also, the last line of the operator should simply be: return outStream;

Edit: also std::ofstream is not the same as std::ostream . Generally, for operator<< , it needs to be defined as:

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

to encompass any stream type.


eventObject is a reference to a const object, so its getEventName() and getEventTime() methods need to be declared as const as well, to specify that they don't modify the object they are called on, eg:

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

Also, your operator is declared as returning an ofstream , but it needs to return an ostream instead, to match the input:

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

上一篇: std :: atomic错误:没有为后缀'++'声明'operator ++(int)'[

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