当我在 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;
}
Run Code Online (Sandbox Code Playgroud)
如果有人知道如何解决这个问题,请告诉我。
从句法上讲,
*numFlag |= static_cast<num>(NUM_TWO);
Run Code Online (Sandbox Code Playgroud)
相当于
*numFlag = (*numFlag | static_cast<num>(NUM_TWO));
Run Code Online (Sandbox Code Playgroud)
这解释了编译器警告/错误。您需要转换|运算符的结果。
*numFlag = static_cast<num>(*numFlag | NUM_TWO);
Run Code Online (Sandbox Code Playgroud)
为了使它工作,你应该使用
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;
}
Run Code Online (Sandbox Code Playgroud)