2016-04-06 5 views
0
ofstream& operator<<(ostream &outStream, const EventClass &eventObject) 
{ 
    outStream << eventObject.getEventName() << " event at " 
    << eventObject.getEventTime() << endl; 

    return(outStream); 
} 

Я считаю, что этого фрагмента достаточно для анализа ошибки.ошибка «перегрузки» оператора: передача «const ....»

Когда я компилирую мой код, я получаю следующие ошибки:

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);

Любые идеи, как решить эти ошибки?

+1

Метод 'getEventName' помечен как' const'? –

+0

Нет, это не так. Должен ли он быть const для решения проблемы? – nm17

+0

Да, он должен быть const, чтобы решить проблему. – kfsone

ответ

0

eventObject является ссылкой на const объекта, поэтому его getEventName() и getEventTime() методы должны быть объявлены как const, а также, чтобы указать, что они не изменяют объект они называются на, например:

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

Кроме того, ваш оператор объявлен как возвращающий ofstream, но он должен вернуть ostream вместо того, чтобы соответствовать вход:

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

Вы необходимо убедиться, что getEventName и getEventTime объявлены const следующим образом:

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

в декларации и реализации EventClass. Это говорит компилятору, что эти методы не будут каким-либо образом изменять поля объекта.

Кроме того, последняя строка оператора должна быть просто: return outStream;

Edit: также std::ofstream не то же самое, как std::ostream. Как правило, для operator<<, она должна быть определена как:

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

, чтобы охватить любого типа потока.

+1

Вы также должны указать, что 'ostream' и' ofstream' не совпадают, для последней ошибки. –

Смежные вопросы