2016-04-16 12 views
0

C++でクラスと列挙型を実装する適切な方法で少し苦労しています。C++でのクラスと列挙の使用

enum { 
    CROSSINGZONE_CLEAR, // no train in crossing area, also initialized state 
    CROSSINGZONE_OCCUPIED, // train detected by the entry sensor 
    CROSSINGZONE_EXITING // train detected by the exit sensor, when sensor clears, state = CLEAR 
}; 

C#では、私は私の列挙に名前を付け、値を指定します:

class CrossingGateRoad { 
    public: 
     boolean PowerOn(byte relayNumber) { 
      digitalWrite(relayNumber, RELAY_ON); 
      return true; 
     } 
     boolean PowerOff(byte relayNumber) { 
      digitalWrite(relayNumber, RELAY_OFF); 
      return true; 
     } 
}; 

、その後、私は次のように列挙型を作成しようとしている

public enum CommodityIndexSector 
{ 
    Currency = 1, 
    StockIndex = 2, 
    GovernmentBond = 3, 
    Metals = 4, 
    Energy = 5, 
    Grains = 6, 
    Softs = 7, 
    Meats = 8, 
    Other = 9 
} 

をし、私がアクセスすることになりそうですね.... enumname.enumvalue。 私はクラスが正しいかどうかを100%確信していません。

+1

typedef enum { CROSSINGZONE_CLEAR, // no train in crossing area, also initialized state CROSSINGZONE_OCCUPIED, // train detected by the entry sensor CROSSINGZONE_EXITING // train detected by the exit sensor } EnumName; 

ABDは、次のコードによってその値にアクセス列挙型の名前を忘れている可能性がありますか? :) –

+0

enumクラスCommodityIndexSector {...}; – Exceptyon

答えて

2

内では、enumの値は外側のスコープに表示されます。お持ちの場合

enum { 
    CROSSINGZONE_CLEAR, // no train in crossing area, also initialized state 
    CROSSINGZONE_OCCUPIED, // train detected by the entry sensor 
    CROSSINGZONE_EXITING // train detected by the exit sensor, when sensor clears, state = CLEAR 
}; 

#defineの値とほぼ同等です。

enum CrossingZones { 
    // ^^^^^^^^^^^^^ 
    CROSSINGZONE_CLEAR, // no train in crossing area, also initialized state 
    CROSSINGZONE_OCCUPIED, // train detected by the entry sensor 
    CROSSINGZONE_EXITING // train detected by the exit sensor, when sensor clears, state = CLEAR 
}; 

を、あなたが特定の列挙型参照できます:

CrossingZones crossingZones = CROSSINGZONE_CLEAR; 

値についてのより直感的な宣言をあなたはそれに名前を付ける必要があるどこか列挙型を指定するには

現在の標準のenumクラスを持つことです:

enum class CrossingZones { 
    // ^^^^^ 
    CROSSINGZONE_CLEAR, // no train in crossing area, also initialized state 
    CROSSINGZONE_OCCUPIED, // train detected by the entry sensor 
    CROSSINGZONE_EXITING // train detected by the exit sensor, when sensor clears, state = CLEAR 
}; 

および範囲からこれらを使用します。

CrossingZones crossingZones = CrossingZones::CROSSINGZONE_CLEAR; 
          // ^^^^^^^^^^^^^^^ 
+0

とswitch文のように使用しますか? case CrossingZones :: CROSSINGZONE_OCCUPIED ....... – dinotom

+0

@dinotomこれは特に問題ですか? –

+0

いいえ、私はC#の男なので、構文を確認していた – dinotom

0

ここではenum classを使用できます。また、値を指定することもできます。しかし、価値を取り戻すためにはキャストが必要です。

enum class Crossing_zone { 
    clear = 0, 
    occupied = 2, 
    exiting = 1 
}; 

int main() 
{ 
    auto myenumvar = Crossing_zone::occupied; 
    return 0; 
} 
-1

あなたが列挙型を宣言するために、次のコードを使用することができます。

EnumName::CROSSINGZONE_OCCUPIED 
+1

それはCスタイルです。 C++にはお勧めできません。 –

+0

推奨されないのはなぜですか?それを使用する際の問題は何ですか? –

関連する問題