如何在C++中实现枚举

How to implement an enum in C++

本文关键字:实现 枚举 C++      更新时间:2023-10-16

我正试图在C++中创建一个枚举并在类中使用它。但我得到了以下错误:

TestClass.cpp:65:49: error: 'TestNameSpace::TestClass::Buttons' is not a class or namespace:Buttons::Right

我正在使用Visual Studio 2015。如有任何协助,我们将不胜感激。

这是我的代码:

测试等级h:

namespace TestNameSpace
{
    class TestClass
    {
    public:
        enum Buttons { Left, Right, Up, Down, Select, None };
        TestClass();
        ~TestClass();
    private:
        Buttons getButtonType(int buttonValue);
    };
}

TestClass.cpp:

#include "AirController.h"
namespace TestNameSpace
{
    Buttons TestClass::getButtonType(int buttonValue)
    {
        if (buttonValue < 50)   return Buttons::Right;
        if (buttonValue < 195)  return Buttons::Up;
        if (buttonValue < 380)  return Buttons::Down;
        if (buttonValue < 555)  return Buttons::Left;
        if (buttonValue < 790)  return Buttons::Select;
        return Buttons::None;
    }
}

我只需添加TestClass::限定即可编译您的代码。话虽如此,您可能想要enum class

您需要#include "TestClass.h",以便在跨文件拆分时使其在翻译单元中可见。

使用经典枚举,访问成员时不会提及枚举类型的名称。换句话说,枚举成员位于枚举所在的名称空间中,而不是枚举内部。

也就是说,删除枚举值前面的Buttons::

TestClass::Buttons TestClass::getButtonType(int buttonValue)
{
    if (buttonValue < 50)   return Right;
    if (buttonValue < 195)  return Up;
    if (buttonValue < 380)  return Down;
    if (buttonValue < 555)  return Left;
    if (buttonValue < 790)  return Select;
    return None;
}

当您使用更现代的枚举声明方式,即"scoped enums"或"enum classes"时,枚举Buttons::的名称需要加前缀:

enum class Buttons { Left, Right, Up, Down, Select, None };

然后,您可以避免与其他具有相同名称的东西(如枚举成员)发生名称冲突。

枚举定义可以放在类定义之外,如果这不是设计要求:

enum Buttons { Left, Right, Up, Down, Select, None };

然后你这样访问它:

Buttons::Left