2016-08-05 11 views
0
std::ostream& operator<<(std::ostream&, const Course&); 

void Course::display() { 
    std::cout << std::left << courseCode_ << " | " << std::setw(20) << courseTitle_ << " | " << std::right 
     << std::setw(6) << credits_ << " | " << std::setw(4) << studyLoad_ << " | "; 
} 

std::ostream& operator<<(std::ostream& os, const Course& a) { 
    a.display(); 
    return os; 
} 

Проблема возникает при реализации операционного оператора ниже a.display(). Я не вижу, где проблема, у меня есть другие коды, которые работают с одной и той же реализацией.Объект имеет классификаторы типов, которые несовместимы с функцией-членом C++

сообщение

ошибка:

Объект имеет тип классификаторов, которые не совместимы с функцией члена «SICT :: Курс :: Дисплей» тип объекта сопзЬ SICT :: Курс

+0

возможно дубликат [ссылка] (http://stackoverflow.com/questions/24677032/object-has-type-qualifiers-that-are-not-compatible-with-the-member-function) –

+2

Функция 'Course :: display', почему она жестко запрограммирована для записи в' std :: cout'? Что делать, если вы хотите записать в файл (что будет возможно с '' '' '' '' '' '' '' '' '<< <<' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ', ' –

ответ

4

В operator<<(), a.display(); не работает, потому что a объявлен как const. Вы не можете вызвать на нем функцию non-const member.

Course::display() должен быть объявлен как функция-член-член, он должен ничего не изменять.

void Course::display() const { 
         ~~~~~ 
    ... 
}