1

Visual Studio 2010 では、データ型の列挙を問題なく作成できました。

enum FRUIT_E : UINT16
{
    APPLE = 0,
    LEMON = 1,
    GRAPE = 2,
};

ただし、WR Workbench でコンパイルしようとすると、次のエラーが発生します。

: エラー: 前の宣言なしで列挙型 'FRUIT_E' を使用しています

フィールドはビットパックされているため、enum のデータ型を指定する必要があります。列挙型を明示的に指定する方法はありますか?

4

1 に答える 1

2

あなたの質問に対する短い答えはノーです。

列挙型の基本型を定義する機能は、C++11 ( http://en.cppreference.com/w/cpp/language/enum ) まで追加されなかった言語機能です。残念ながら、WindRiver は、最新の C++ 標準 ( vxworks の C++ 11) に準拠するコンパイラのサポートに時間がかかりました。VxWorks 7.0+ ( https://stackoverflow.com/a/36311473 )の g++ の商用バージョンでの C++11 のサポートについて言及されています。しかし、WorkBench のバージョン (<4.0) は、これが役に立たないことを意味します。

あなたの状況では、次のような回避策をまとめるかもしれません。

namespace FRUIT_E
{
    static const UINT16 APPLE = 0;
    static const UINT16 LEMON = 1;
    static const UINT16 GRAPE = 2;
}

typedef FRUIT_T UINT16;

...

FRUIT_T fruit = FRUIT_E::APPLE;

ただし、FRUIT_T は UINT16 の単なるエイリアスであるため、これはタイプ セーフを提供しません。ですから、理想にはほど遠いです。質問にタグを追加しました。望ましい動作をより厳密にエミュレートする、より良い回避策があるかもしれません。しかし、新しい言語機能の追加は、既存の方法が不十分であることを示しているようです。

于 2016-10-16T02:03:26.070 に答える