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);
如何解决这些错误?
答案 0 :(得分:3)
您需要确保将getEventName
和getEventTime
声明为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)