2016-10-12 2 views
1

Dans Visual Studio 2010, j'étais capable de construire une énumération avec le type de données très bien.Énumération avec le type de données dans WindRiver Workbench 3.3

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

Cependant, quand j'essayé de compiler WR Workbench, je reçois l'erreur suivante:

: error: use of enum 'FRUIT_E' without previous declaration

je vraiment besoin de préciser le type de données ENUM en tant que champs sont bitpacked. Est-il possible de spécifier explicitement le type d'énumération?

Répondre

2

La réponse courte à votre question est non.

La possibilité de définir un type de base pour les énumérations est une fonctionnalité de langage qui n'a pas été ajoutée avant C++ 11 (http://en.cppreference.com/w/cpp/language/enum). Malheureusement, WindRiver a été lent à prendre en charge les compilateurs qui sont conformes aux normes C++ modernes (C++ 11 in vxworks). Il est fait mention de la prise en charge de C++ 11 dans les versions commerciales de g ++ pour VxWorks 7.0+ (https://stackoverflow.com/a/36311473). Mais, votre version WorkBench (< 4.0) implique que cela ne vous sera pas utile.

Dans votre situation, je pourrais concocter un travail autour, comme celui-ci:

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; 

Toutefois, cela ne fournira pas de sécurité de type, comme FRUIT_T est juste un alias pour UINT16. Donc, c'est loin d'être idéal. J'ai ajouté des tags à votre question. Il peut y avoir de meilleures solutions de rechange, imitant le comportement souhaité de plus près. Mais l'ajout d'un nouveau langage semble indiquer que les méthodes existantes étaient inadéquates.

+0

Merci Cliff pour votre réponse. Savez-vous par hasard comment ajouter un drapeau de compilateur dans le banc de travail? Je veux juste voir une possibilité d'ajouter une directive "-std = C++ 11" pour que WR puisse être capable de construire? J'apprécie vraiment votre aide. --Justin – Justin

+0

Je n'ai pas installé WorkBench pour le moment. Mais, cette réponse à une autre question décrit comment trouver et modifier les indicateurs du compilateur dans la spécification de construction active: http://stackoverflow.com/a/8593028/1204259 –

+0

Bizarre. Cela n'a pas lié comme je l'aurais prévu. J'essayais de lier à une autre réponse, qui décrit les paramètres de spécification de construction actifs qui peuvent être trouvés ici: Propriétés-> Propriétés de construction-> Construire le support et les spécifications. Quoi qu'il en soit, vous devriez être capable de trouver le compilateur actif et expérimenter avec des drapeaux dans cette spécification. Bonne chance! –