C ++ 11枚举类:加上int无法编译,为什么?

时间:2017-10-26 07:33:46

标签: 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;
}

无法编译:

clang++ testenum.cpp -std=c++11
testenum.cpp:10:17: error: invalid operands to binary expression ('A' and 'int')
    return value+1;

好吧,我已经宣布A为&#34; int&#34;枚举,为什么它没有&#34; +&#34;用int?如何解决?

3 个答案:

答案 0 :(得分:4)

无法将enum class隐式转换为整数。您必须使用static_cast,例如:

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

答案 1 :(得分:2)

枚举类是强类型的,不会隐式转换为int。为此,您需要定义转换为int或&#39; +&#39;你的枚举类中的运算符。

答案 2 :(得分:0)

添加

 <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:fontFamily="@font/dancing_script"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

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