访问在C ++中的结构中声明的枚举变量

时间:2018-10-23 09:10:07

标签: c++ enums nested structure

这是结构,如以下代码片段所示。

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 :(得分:1)

您可以通过创建结构的对象并使用(object).state来访问枚举变量

实际上,可以使用结构的对象和'。'访问结构的任何成员。运算符。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我认为问题是您的术语“枚举变量”。枚举值不是 变量,它们基本上只是命名为常量。 结构具有成员变量,您可以照常访问它们。

您使用的枚举值与整数文字或宏基本相同。

例如,假设您有

"

然后(一旦初始化了指针),您只需设置状态即可

#define POWER_OFF "PWROFF"

这当然需要在全局范围内定义枚举。