簡體   English   中英

如何在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 Studio2015。不勝感激。

這是我的代碼:

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

只需添加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;
}

枚舉Buttons::的名稱需要在使用更現代的聲明枚舉的方式時加上前綴,即“作用域枚舉”或“枚舉類”:

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

然后,避免名稱與其他名稱(例如枚舉成員)相同的內容發生沖突。

如果不是設計要求,則可以將枚舉定義放在類定義之外:

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

那么您可以像這樣訪問它:

Buttons::Left

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM