如何在C++中实现枚举
How to implement an enum in C++
我正试图在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
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- 具有特定于枚举的实现和共享功能 (CRTP) 的类模板
- 如何在V8中为C 本机对象实现属性枚举器
- 如何在C 中实现真正的枚举类
- 强类型枚举的语法实现错误
- 枚举在内部作为整数实现.那为什么会给出错误
- 如何实现像Qt::LeftDockWidgetArea这样的枚举名称
- 在C++中实现枚举类型
- 如何在C++中实现枚举
- 实现同时具有枚举和类行为的东西
- 如何实现枚举值到类模板的隐式转换
- 不确定如何在头文件中实现可访问的枚举
- 枚举是实现位标志的规范方式吗?
- c++枚举的类实现
- 如何使用嵌套枚举实现代码重用
- 枚举成员类型仍然依赖于实现