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