Оператор C++14 << для вставки потока и класса enum

Я пишу игру, в которой есть 2 игрока, "ЧЕРНЫЙ" и "БЕЛЫЙ".

У меня есть следующий enum класс:

enum class PlayerType
{
    BLACK, WHITE
};

Я хотел бы написать оператор ostream<< для этого класса. Вот моя попытка:

std::ostream& operator<<(std::ostream& os, const PlayerType& pt)
{
    if(pt == PlayerType::BLACK)
        os << "Black";

    return os;
}

Однако я получаю следующую ошибку компилятора:

operator<< must take exactly 1 argument

Я думаю, проблема в том, что я вложил класс enum и operator<< в другой класс; class Player,

Могу ли я что-нибудь сделать с этим, не удаляя enum из этого класса?

2 ответа

Могу ли я что-нибудь сделать с этим, не удаляя enum из этого класса?

Если это имеет смысл, вы можете объявить оператора как friend из Player, Это делает его не членом. Тем не менее, вы должны спросить себя, действительно ли дружба - это отношение, которое вам нужно между оператором и классом. Если нет, переместите оператор за пределы определения класса.

При объявлении любого из бинарных операторов как неstatic член они будут принимать один аргумент в дополнение к неявному объекту, на который указывает this, Объект, на который указывает this всегда является левым аргументом двоичного оператора, а объявленный аргумент является правым аргументом. Операторы с дополнительными аргументами не являются законными.

Поскольку потоковые классы должны находиться слева от << оператор, вы не можете определить потоковые операторы как неstatic члены. Делать их не-членами функции - единственная реальная возможность. Используя friend Функция для определения оператора вывода по-прежнему эффективно объявляет функцию, не являющуюся членом.

Другие вопросы по тегам