моя печатная строка:
string printOutput = "Book #" << &getCallNumber() << ", title: " << &getTitle() << " by " << &getAuthor() << " pages: " <<
> getNumPages() << ", status: " << getStatus() << ", fees: " /*<<
> getFees()*/;
В C ++, если вы хотите что-то напечатать, вы можете просто std::cout
это (учитывая, что вещи, которые вы хотите распечатать, перегружены operator<<
для ostream
) - Нет необходимости создавать объект string
первый
std::cout << "Book #" << getCallNumber() << ", title: " << getTitle() << " by "
<< getAuthor() << " pages: " << getNumPages() << ", status: " << getStatus() << ", fees: ";
И поскольку getStatus()
возвращает Status
, вы должны убедиться, что класс Status
перегружен operator <<
для ostream
.
Обратите внимание, что знак &
спереди отсутствует - при добавлении &
будет взят адрес string
, а не самого string
.
UPDATE
Вы можете перегрузить operator<<
где угодно. Это не обязательно должна быть функция friend
, если она не будет обращаться к части private
класса. И учитывая, что Status
является enum class
, я бы полагал, что перегрузка его выше main
будет достаточной. И учитывая
enum class Status { AVAILABLE, ON_LOAN, PROCESSED, MISSING, OVERDUE, };
Вы можете сделать что-то вроде
ostream& operator<<(ostream& os, Status s) {
switch(s)
{
case Status::AVAILABLE:
os << "AVAILABLE";
break;
case Status::ON_LOAN:
os << "ON_LOAN";
break;
....//And do the same thing for the other cases
}
return os;
}