Доступ к переменной enum, объявленной в Структуре в C ++ - PullRequest
0 голосов
/ 23 октября 2018

Это структура, определенная, как показано в следующем фрагменте кода.

struct EPSecODSStat {

   uint64 flags;
   uint32 maxPause;
   uint32 timeToAutoFinish;
   uint64 scanned;
   uint64 lowResourceSkipped;
   uint64 aclSkipped;
   uint64 sharingSkipped;
   uint64 otherSkipped;
   EPSecODSState state;
   uint32 elapsedTime;
}

odsStat - указатель на структуру EPSecODSStat ..

enum EPSecODSState {
   EPSEC_ODS_RUNNING     = 0x0001,
   EPSEC_ODS_PAUSED      = 0x0002,
   EPSEC_ODS_PAUSING     = 0x0003,
   EPSEC_ODS_FINISHED    = 0x0004,
   EPSEC_ODS_TERMINATING = 0x0005,
   EPSEC_ODS_READY       = 0x0006,
} EPSecODSState;

Теперь, как мне получить доступ к членамперечисления с использованием структуры EPSecODSStat?Может кто-нибудь, пожалуйста, помогите мне через это ..

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Я думаю, что проблема в вашем термине "enum переменные ".Перечисляемые значения являются , а не переменными, они в основном являются просто именованными константами.Структура имеет переменные-члены, и вы получаете к ним доступ как обычно.

Значения перечисления, которые вы используете в основном так же, как целочисленные литералы или макросы.

Например, давайтескажем, у вас есть

EPSecODSStat *pointer_to_struct;

Затем (как только вы инициализировали указатель) вы можете установить состояние, просто выполнив

pointer_to_struct->state = EPSEC_ODS_RUNNING;

Это, конечно, требует, чтобы перечисление было определено вглобальный охват.

0 голосов
/ 23 октября 2018
enum EPSecODSState {
   EPSEC_ODS_RUNNING     = 0x0001,
   EPSEC_ODS_PAUSED      = 0x0002,
   EPSEC_ODS_PAUSING     = 0x0003,
   EPSEC_ODS_FINISHED    = 0x0004,
   EPSEC_ODS_TERMINATING = 0x0005,
   EPSEC_ODS_READY       = 0x0006,
} EPSecODSState; // <<== here

Вы определяете переменную с именем EPSecODSState типа enum EPSecODSState.Эта переменная скрывает тип EPSecODSState, поэтому вам придется использовать

enum EPSecODSState foobar;

, чтобы определить другую переменную типа EPSecODSState.Я не думаю, что это было преднамеренно, и что вы, возможно, хотели написать

typedef enum EPSecODSState {
   EPSEC_ODS_RUNNING     = 0x0001,
   EPSEC_ODS_PAUSED      = 0x0002,
   EPSEC_ODS_PAUSING     = 0x0003,
   EPSEC_ODS_FINISHED    = 0x0004,
   EPSEC_ODS_TERMINATING = 0x0005,
   EPSEC_ODS_READY       = 0x0006,
} EPSecODSState;

, который является регулярно встречающимся шаблоном в C, но ненужным в C ++.При этом, с вашей версией определения enum вы должны будете написать

struct EPSecODSStat {
   //...
   enum EPSecODSState state;
   //...
};

Когда у вас есть экземпляр EPSecODSStat, вы можете получить доступ к EPSecODSStat::state следующим образом:

EPSecODSStat epsecodsstat
epsecodsstat.state = EPSEC_ODS_PAUSING;

как получить доступ к переменным перечисления через указатель структуры.

Если у вас есть указатель на этот экземпляр

EPSecODSStat *odsStat = &epsecodsstat;

, вы можетеполучить к нему доступ с помощью оператора стрелки (->):

odsStat->state = EPSEC_ODS_PAUSING;

Оператор стрелки является просто синтаксическим сахаром для

(*odsStat).state
0 голосов
/ 23 октября 2018

Вы можете получить доступ к переменной перечисления, создав объект структуры и используя (object) .state

Фактически любой член структуры может быть доступен с использованием его объекта и '.'оператор.

...