C++11枚举类:plus int未能编译,原因是什么?

C++11枚举类:plus int未能编译,原因是什么?,c++,class,c++11,enums,int,C++,Class,C++11,Enums,Int,我有一个快速代码: #include<iostream> using namespace std; enum class A:int { u=1, v=2, w=3 }; template<A value> int nextEnum(){ return value+1; } int main() { nextEnum<A::u>(); return 0; } 好吧,我已经声明了一个为int的枚举,为什么它不能用

我有一个快速代码:

#include<iostream>
using namespace std;
enum class A:int {
    u=1,
    v=2,
    w=3
};
template<A value>
int nextEnum(){
    return value+1;
}
int main() {
    nextEnum<A::u>();
    return 0;
}
好吧,我已经声明了一个为int的枚举,为什么它不能用int+呢?如何修复它?

枚举类不能隐式转换为整数。您必须使用静态_cast,例如:

template <A value>
A nextEnum() {
  return static_cast<A>(static_cast<int>(value) + 1);
}
枚举类不能隐式转换为整数。您必须使用静态_cast,例如:

template <A value>
A nextEnum() {
  return static_cast<A>(static_cast<int>(value) + 1);
}

枚举类是强类型的,不隐式转换为int。为此,您需要在枚举类中定义转换为int或“+”运算符。

枚举类是强类型的,不隐式转换为int。为此,您需要在枚举类中定义转换为int或“+”运算符。

添加

int operator+(A a, int b) {
    return a + b;
}
将修复此错误!Windows VS2017上的测试已通过添加

int operator+(A a, int b) {
    return a + b;
}

将修复此错误!在Windows VS2017上通过了测试

枚举的继承更多是针对范围和大小,而不是实际继承。此外,通过使用类型名,A是强类型的。它不能隐式转换为其他整数类型,您必须显式转换它。枚举的继承更多的是范围和大小,而不是实际继承。此外,通过使用类型名,A是强类型的。它不能隐式转换为其他整数类型,您必须显式转换它。事实上,enum类的整个要点是它不会隐式转换为int或从int转换。好吧,事实上,枚举不会被注入到包含的命名空间中。事实上,enum类的全部要点在于它不会隐式地转换为int和int之间的转换。事实上,枚举不会被注入到包含的名称空间中。