错误:从"int"到枚举c++的转换无效
error: invalid conversion from ‘int’ to enum c++
当我用c++编译下面的示例代码时,我得到了"错误:从'int'到'num'的无效转换"。用枚举名称对其进行类型转换没有帮助。
#include <iostream>
using namespace std;
typedef enum
{
NUM_ZERO = 0,
NUM_ONE = 1,
NUM_TWO = 2,
NUM_THREE = 4
} num;
int main()
{
num* numFlag;
*numFlag |= static_cast<num>(NUM_TWO);
return 0;
}
如果有人知道如何解决这个问题,请告诉我。
从语法上讲,
*numFlag |= static_cast<num>(NUM_TWO);
相当于
*numFlag = (*numFlag | static_cast<num>(NUM_TWO));
这解释了编译器警告/错误。您需要强制转换|
运算符的结果。
*numFlag = static_cast<num>(*numFlag | NUM_TWO);
要使其工作,您应该使用
int main()
{
// Make numFlag an object instead of a pointer.
// Initialize it.
num numFlag = NUM_ZERO;
// Perform the bitwise |
numFlag = static_cast<num>(numFlag | NUM_TWO);
return 0;
}
如果你坚持这样做,至少要用一个运算符来弥补不足,这样剩下的代码就可以写得至少相当干净:
#include <iostream>
using namespace std;
enum num
{
NUM_ZERO = 0,
NUM_ONE = 1,
NUM_TWO = 2,
NUM_THREE = 4
};
num &operator|=(num &a, num const &b) {
a = static_cast<num>(a | b);
return a;
}
int main()
{
num numFlag;
numFlag |= NUM_TWO;
}
但请记住,这将允许您生成不在枚举中的值。例如,像这样的序列
num a{NUM_ZERO};
a |= NUM_TWO;
a |= NUM_THREE;
给a
一个不在枚举中的值。
根据您正在执行的变量和操作的名称,如果您需要指针,则numFlag
的类型应为int
或int *
。否则,如果你试图在该变量/内存中保留多个标志,你可能会有未定义的行为(根据你假设的标志值(:
int numFlag = NUM_ZERO;
numFlag |= NUM_TWO; // no casting is necessary
numFlag |= NUM_ONE; // and it will not lead to UB if you do this
相关文章:
- 'char (*RtlpNumberOf(T (&)[N]))[N]':无法从"char *"
- Arduino IDE 错误 - 无法找到数字文字运算符"运算符""f900ff"
- "inline"、"constexpr"或"noexcept"
- "非静态数据成员之前需要构造函数" - 我是否使用"boost::variant"
- 我必须安装"libbitcoin-server"才能包含"bitcoin.hpp"
- “并非所有控制路径都返回一个值./&quot“控制可能达到非空隙功能的末端”.验证时循环时
- 如何输出a'&quot在不使用线端的情况下进行文件
- 删除“按任何键” ..&quot.从VS C 控制台应用程序
- 如何检测我何时向可变参数函数传递"std::string"而不是"c_str()"
- '&lt;'''&lt;'''&quot的模板类错误''令牌”
- 错误消息:"jj"的名称查找已更改为ISO"for"范围,(如果您使用"