这是结构,如以下代码片段所示。
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访问枚举的成员?谁能帮我解决这个问题。
答案 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"
这当然需要在全局范围内定义枚举。