【问题标题】:C++14 operator << for stream insertion and enum classC++14 运算符 << 用于流插入和枚举类
【发布时间】:2015-12-20 16:21:16
【问题描述】:

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

我有以下枚举类:

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

我认为问题在于我嵌套了枚举类,而 operatorclass Player.

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

【问题讨论】:

  • 从该类中删除函数。

标签: c++ class enums nested enum-class


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-08-03
      • 1970-01-01
      • 2023-03-18
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 2011-01-28
      • 1970-01-01
      相关资源
      最近更新 更多