0

我正在编写一个游戏,其中有 2 个玩家,“BLACK”和“WHITE”。

我有以下枚举类:

enum class PlayerType
{
    BLACK, WHITE
};

我想为这个类写一个 ostream operator<<。这是我的尝试:

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

    return os;
}

但是我收到以下编译器错误:

operator<< must take exactly 1 argument

我认为问题在于我正在嵌套枚举类,并且 operator<< 在另一个类中;class Player.

如果不从此类中删除枚举,我能做些什么吗?

4

2 回答 2

2

如果不从此类中删除枚举,我能做些什么吗?

如果有意义,您可以将运算符声明为 a friendof Player。这使它成为非会员。但是,您需要问自己,友谊是否真的是您需要的操作员和班级之间的关系。如果不是,则将运算符移到类定义之外。

于 2015-12-20T16:23:11.113 回答
0

当将任何二元运算符声明为非static成员时,除了 . 指向的隐式对象之外,它们还将采用一个参数this。指向的对象this始终是二元运算符的左侧参数,而声明的参数是右侧参数。带有附加参数的运算符是不合法的。

由于流类需要位于<<运算符的左侧,因此您不能将流运算符定义为非static成员。使它们成为非成员函数是唯一真正的选择。使用friend函数定义输出运算符仍然有效地声明了一个非成员函数。

于 2015-12-20T22:00:11.620 回答