如何在C ++中实现枚举

时间:2015-12-01 11:08:41

标签: c++ enums

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

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

我正在使用Visual Studio 2015.任何帮助将不胜感激。

这是我的代码:

TestClass.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;
    }
}

3 个答案:

答案 0 :(得分:3)

只需添加with(dd, ave(Volume, ID, Act, FUN= function(x) c(0, diff(x))) 资格即可

I got your code to compile。话虽这么说,你可能想要TestClass::

当您在文件中拆分文件时,您需要enum class才能使其在该翻译单元中可见。

答案 1 :(得分:2)

使用经典枚举,可以访问成员,而不提及枚举类型的名称。换句话说,枚举成员生活在枚举所在的名称空间中,而不是枚举中。

这意味着,请删除枚举值前面的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;
}

当您使用更多现代方式声明枚举时,枚举Buttons::的名称需要加上前缀,即&#34;作用域枚举&#34;或者&#34;枚举类&#34;:

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

然后,您可以避免与其他与枚举成员相同的名称冲突。

答案 2 :(得分:-1)

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

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

然后你这样访问它:

Buttons::Left