全部 我从C项目中获取此代码。我无法在g ++下以任何方式编译它。
我该怎么办?
enum EnumIndexID{
ID_VALUE_A=2,
ID_VALUE_B=2
}
struct newtype {
enum MyEnumID eid;
const char *name;
} table[] = {
[ID_VALUE_A] = { MyEnumA, "ID_MSG_HeartbeatReq"},
[ID_VALUE_B] = { MyEnumB, "ID_MSG_HeartbeatReq"},
};
答案 0 :(得分:6)
您确定您的编译器支持Designated Initializer语法吗?
g ++没有。 从那个超链接:
标准C89要求初始值设定项的元素以固定顺序出现,与初始化的数组或结构中元素的顺序相同。
在ISO C99中,您可以按任何顺序给出元素,指定它们适用的数组索引或结构字段名称,GNU C也允许它作为C89模式的扩展。 此扩展未在GNU C ++中实现。
答案 1 :(得分:5)
以下编译为C99(注意:它无效为C89):
enum MyEnumID {
MyEnumA, MyEnumB
};
enum EnumIndexID{
ID_VALUE_A=2,
ID_VALUE_B=2
};
struct newtype {
enum MyEnumID eid;
const char *name;
} table[] = {
[ID_VALUE_A] = { MyEnumA, "ID_MSG_HeartbeatReq"},
[ID_VALUE_B] = { MyEnumB, "ID_MSG_HeartbeatReq"},
};
int main() { return 0; }
编辑:其他人注意到ID_VALUE_A
和ID_VALUE_B
是相同的值,即2.这可能是您代码中的错误。但是,gcc接受了这一点。
干杯&第h。,
答案 2 :(得分:0)
在第一个枚举定义后,您缺少分号。
修改强>
另外,it turns out that this syntax is supported by GCC but isn't supported by G++由于某种原因。
答案 3 :(得分:0)
除enum
定义后缺少分号外,table[]
声明在语法上不正确不会在G ++上编译:
struct newtype {
enum MyEnumID eid;
const char *name;
} table[] = {
{ MyEnumA, "ID_MSG_HeartbeatReq"},
{ MyEnumB, "ID_MSG_HeartbeatReq"},
};
编辑:今天我已经了解了指定的初始化。
答案 4 :(得分:-1)
你至少需要一个切入点:
int main() {
.... lots of other code ...
}