课堂"enum - invalid conversion from int"
"enum - invalid conversion from int" in class
我在将方法参数放到我的类中时遇到问题:
class A {
public:
enum Mode {ModeA, ModeB, ModeC};
... // other methods, constructor etc
void setMode(Mode m) {
mMode = m;
}
private:
Mode mMode;
}
int main(int argc, char **argv) {
A a;
a.setMode(A::ModeA | A::ModeC );
return 0;
}
问题,我得到一个C++编译器错误invalid vconversion from int to A::Mode
,我不明白,为什么我不能连接枚举值?我需要在我的代码,所以解决这个问题的任何帮助都会非常好。
默认情况下,两个枚举的operator|
结果不是枚举。下课后,添加如下内容:
A::Mode operator|( A::Mode a, A::Mode b )
{
return A::Mode( int( a ) | int( b ) );
}
如果您的标准库支持它,则以下内容更适合未来,因为转换为 int
并不总是正确的:
A::Mode operator|( A::Mode a, A::Mode b )
{
typedef std::underlying_type< A::Mode >::type UL;
return A::Mode( static_cast< UL >( a ) | static_cast< UL >( b ) );
}
与其他答案不同,您只需将其添加一次(到正确的位置),所有用途都会自动覆盖。
也许你需要这个:
a.setMode( (A::Mode) (A::ModeA | A::ModeC ));
A::ModeA | A::ModeC
做了一个int
所以再次投掷到A::Mode
在这种情况下
,enum
的基础类型可能是int
,并且编译器不能依赖于使用|
(按位或)构造的标志是此枚举中的有效值。
但是,您知道结果将是此枚举的有效值,因此您可以执行以下操作:
A::Mode newMode = (A::Mode) (A::ModeA | A::ModeC);
a.setMode(newMode);
相关文章:
- 为什么我会收到"invalid conversion from 'Queue*/Stack*' to 'int'"错误消息?
- 为什么选择 g++ 给予者:"error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]"
- 将矩阵传递给函数。 "invalid conversion from 'int (*)[columns]' to 'int' [-fpermissive]"
- atoi() - from char to int
- C++ sendto() 给出"invalid conversion from ‘int (*)(int, int, int)throw ()’ to ‘int’"错误
- C++问题"cannot convert argument 1 from 'int [5]' to 'int'"
- 返回 vector<pair<int,int>> & from c++ 方法到 python 使用 swig typemap 的元组列表
- 如何修复此错误错误"error C2440: '=' : cannot convert from 'int (*)[]' to 'int *' "?
- C++ 将字符附加到 std::字符串 from int.
- 课堂"enum - invalid conversion from int"
- 如何解决此棉绒警告"Implicit binary conversion from int to unsigned int"
- 为什么我会收到"cannot convert from Dequeu<int> to int"错误?
- 错误消息"invalid conversion from ‘void*’ to ‘unsigned int’"
- "error: invalid conversion from 'int*' to 'int' function"
- calling int main() from python
- "invalid cast from type 'const myClass' to type 'int'",如何使其有效?
- "Truncation from int to char"不产生任何结果
- 交叉编译时法律值"Narrowing conversion from 'int' to 'char' inside { }"
- GenICam::gcstring from int
- "error: conversion from 'int' to non-scalar type 'COORD' requested"