【问题标题】:Compiler errors when trying to overload operator+= for an enum尝试为枚举重载 operator+= 时出现编译器错误
【发布时间】:2013-09-09 16:10:28
【问题描述】:

我在尝试为我在命名空间中定义的枚举重载 += 运算符时遇到了一些问题。我不需要实际使用运算符,但是,我正在使用的库 (boost::icl) 要求为我在区间图中存储的数据定义 += 运算符。每当我尝试编译下面的代码时,我都会使用 Intel C++ 得到以下编译器错误:

error : enum "test::events" has no member "operator+="

有什么建议吗?

test.h:

namespace test {

    enum events {
        SHUTIN = 0,
        ACTIVE,
        RECOMPLETE,
        CTI,
        RTP
    };

   events & events::operator+= (const events &rhs);

}; // end namespace test

test.cpp:

test::events & test::events::operator+= (const test::events &rhs) {
    return *this;
}

【问题讨论】:

  • 你不能为枚举重载operator+=
  • 我就是这么想的,但是我在网上找不到任何明确说明的内容...感谢您的确认。
  • 即使你可以,你也不能为还没有成员函数的类型发明成员函数。
  • @juanchopanza 真的吗?它会遵循(至少对我而言),如果您可以为用户定义的数据结构定义运算符,那么您应该能够为现有类型重载或创建新的运算符。直到。感谢您的信息。
  • 您必须在用户定义类型的定义中声明这些成员运算符。

标签: c++ boost enums operator-overloading boost-icl


【解决方案1】:

您可以使用免费功能:

events & operator+= (events &lhs, const events &rhs);

(使用 GCC 4.8 测试,如果 Intel C++ 拒绝它,我认为这是一个错误)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多