Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将整数或字符转换为相应的枚举 我试着用OOP C++制作一个TIC Tac趾游戏。 我有一个类似以下作品的枚举: enum class Type : uint8_t { O, X, None };_C++ - Fatal编程技术网

将整数或字符转换为相应的枚举 我试着用OOP C++制作一个TIC Tac趾游戏。 我有一个类似以下作品的枚举: enum class Type : uint8_t { O, X, None };

将整数或字符转换为相应的枚举 我试着用OOP C++制作一个TIC Tac趾游戏。 我有一个类似以下作品的枚举: enum class Type : uint8_t { O, X, None };,c++,C++,我还有一个类播放器,这里有这个功能: Piece Player::PickPiece(std::istream& in) const { in >> pickedPiece; in >> temp; auto pickedPiece = static_cast<Piece::Type>(temp); return pickedPiece; } piecplayer::PickPiece(std::istream&in)

我还有一个类播放器,这里有这个功能:

Piece Player::PickPiece(std::istream& in) const
{
    in >> pickedPiece;
    in >> temp;
    auto pickedPiece = static_cast<Piece::Type>(temp);
    return pickedPiece;
}
piecplayer::PickPiece(std::istream&in)const
{
在>>拾取件中;
在>>温度;
自动拾取件=静态铸件(温度);
返回拾取件;
}

只有当我读取0代表O(0代表O)、1代表X这样的值时,它才起作用,但我想读取X或O这样的字符,然后将其转换为int枚举。我该怎么做?我知道我可以用一些if条件来做,但我不喜欢这种方法。

您可以使用switch语句:

Piece convert(int value)
{
    switch(value)
    {
        case 0:
        case 'o':
        case 'O':
            return Piece::O;
        case 1:
        case 'x':
        case 'X':
            return Piece::X;
        default:
            // Handle the case when the character and the integers are wrong
    }
}

您可以使用switch语句:

Piece convert(int value)
{
    switch(value)
    {
        case 0:
        case 'o':
        case 'O':
            return Piece::O;
        case 1:
        case 'x':
        case 'X':
            return Piece::X;
        default:
            // Handle the case when the character and the integers are wrong
    }
}

正如您提到的,您的枚举类型将等效于
0、1和2
。但是,您可以在声明中为枚举指定不同的值

enum class Type : uint8_t
{
    O = 'O',
    X = 'X',
    None
};

Type t = static_cast<Type>('X');
enum类类型:uint8\t
{
O='O',
X='X',
没有一个
};
t型=静态_型(“X”);

但是,您不能再使用0和1。另一件需要注意的事情是,如果您专门使用
char
s,您可能应该使用它作为基础类型,而不是
uint8\u t
,因为它们不能保证相同。

正如您提到的,您的枚举类型将等同于
0、1和2
。但是,您可以在声明中为枚举指定不同的值

enum class Type : uint8_t
{
    O = 'O',
    X = 'X',
    None
};

Type t = static_cast<Type>('X');
enum类类型:uint8\t
{
O='O',
X='X',
没有一个
};
t型=静态_型(“X”);

但是,您不能再使用0和1。另一件需要注意的事情是,如果您专门使用
char
s,您可能应该使用它作为基础类型,而不是
uint8\u t
,因为它们不能保证是相同的?标题是“convert enum to int”,但看起来您实际上想要将字符串转换为enum。它是哪一个?“在C++中将枚举转换为int”-使用转换:
int int\u value\u of_enum=static\u转换(一个_enum\u值)
enum类类型
——这是一个非常通用的名称。您可能需要重新思考:)您是否尝试过
if(temp=='X'| | temp=='X')返回类型::X?标题是“convert enum to int”,但看起来您实际上想要将字符串转换为enum。它是哪一个?“在C++中将枚举转换为int”-使用转换:
int int\u value\u of_enum=static\u转换(一个_enum\u值)
enum类类型
——这是一个非常通用的名称。您可能想重新考虑:)切换(tolower(value))
而不是检查每个语句中每个字符的小写和大写字母不是更好吗…?这是一个很好的观点。我不想这样做,以防除了0和1之外还有其他整数(不在这里,但如果其他人看到解决方案)并且其中一个被转换。做
switch(tolower(value))
而不是检查每个语句中每个字符的小写和大写字母…?这是一个很好的观点。我不想这样做,以防除了0和1之外还有其他整数(不在这里,但如果其他人看到解决方案),其中一个被转换。