【问题标题】:Enum Class Operator Overload no match found for operator枚举类运算符重载找不到运算符的匹配项
【发布时间】:2019-07-26 17:04:47
【问题描述】:

我正在尝试为 Enum 类重载一些运算符。 我收到一个编译器错误,说它无法找到运算符

在 Enum.h 中

enum class SomeEnum : unsigned
{
    Test0 = 0,
    Test1  = (1 << 0),
    Test2  = (1 << 1),
};

在 Enum.cpp 中

#include "Enum.h"
#include <type_traits>
SomeEnum operator|(SomeEnum lhs, SomeEnum rhs)
{
    return static_cast<SomeEnum > (
        static_cast<std::underlying_type<SomeEnum >::type>(lhs) |
        static_cast<std::underlying_type<SomeEnum >::type>(rhs)
    );
}

在 main.cpp 中

#include "Enum.h"
int main()
{
  SomeEnum blah = SomeEnum::Test1 | SomeEnum::Test2; 
}

编译器吐出一个错误说: 'operator|' 不匹配(操作数类型为 'SomeEnum ' 和 'SomeEnum ')

【问题讨论】:

    标签: c++11 operator-overloading enum-class


    【解决方案1】:

    您需要在Enum.h文件中添加operator|的声明:

    enum class SomeEnum : unsigned
    {
        Test0 = 0,
        Test1  = (1 << 0),
        Test2  = (1 << 1),
    };
    
    SomeEnum operator|(SomeEnum lhs, SomeEnum rhs); // added
    

    如果在包含Enum.h 之后在main.cpp 中没有此声明,编译器只能看到SomeEnum 的定义,但它不知道Enum.cpp 中定义的operator| 的存在

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 2018-07-19
      • 2012-07-23
      • 1970-01-01
      相关资源
      最近更新 更多