枚举和结构调用

时间:2016-08-16 19:23:56

标签: c++ struct enums compiler-errors initialization

我有一个名为Status.h的头文件,如下所示:

enum State {
    OFFLINE = 0,
    ONLINE = 1,
    ...
};

struct AgentStatus {
    State statusInfo;
...
};

在我的.cpp文件中,我想初始化此结构,设置状态,并调用每隔10秒查找一次状态。这是我的尝试:

AgentStatus s1;
s1.statusInfo = 0;
while(1){
    std::cout<<"scanner status = "<<s1.statusInfo<<std::endl;
    usleep(1000000);
}

我得到的错误是:

error: invalid conversion from ‘int’ to ‘State’ [fpermissive]
 s1.statusInfo = 0;

如何将我的结构设置为状态枚举中的其中一个值?

2 个答案:

答案 0 :(得分:3)

您可以隐式地将State转换为数字,但不能从数字转换为State

尝试

s1.statusInfo = OFFLINE;

s1.statusInfo = static_cast<State>(0);

答案 1 :(得分:0)

您已定义:

enum State {
    OFFLINE = 0,
    ONLINE = 1,
    ...
};

然后你这样做:

s1.statusInfo = 0;

这需要演员,你可以/应该(可读性,维护......)避免它,通过这样做:

s1.statusInfo = OFFLINE;

最小例子:

enum State {
    OFFLINE = 0,
    ONLINE = 1,
};

struct AgentStatus {
    State statusInfo;
};

int main() {
    AgentStatus s1;
    s1.statusInfo = OFFLINE;
    return 0;
}

汇编:

C02QT2UBFVH6-lm:~ gsamaras$ g++ -Wall main.cpp
C02QT2UBFVH6-lm:~ gsamaras$