windows下vs的编译器编译下面的代码没有问题,enum前置声明
enum kMessageSendState
struct DeleteRequestParam
{
std::list<std::pair<std::string, kMessageSendState> > uuid_state_list;
};
但是在gcc4.9.3的编译器里编译会报错
error: use of enum ‘kMessageSendState’ without previous declaration
enum kMessageSendState;
^
原因:
vs是自己有特性可以支持这个写法,标准c++不支持。
c++编译器需要支持为变量预留多少空间,而前置声明的enum无法告诉编译器枚举的具体类型 int word char.
正确的写法:
enum kMessageSendState:unsigned int;
如果遇到underline type的错误,就去实际定义enum kMessageSendState的地方后面也加上:unsigned int;
enum kMessageSendState:unsigned int
{
kOK=0,
kFailed
}