c语言中在结构体声明的时候不是需要初始化吗

zjtzlqr 2013-02-24 07:57:27
typedef struct
{
u8 box[2];
u16 color;
u8 next;
}Sha_Struct;


typedef struct
{
u16 rdm;
u16 posx,posy;
Sha_Struct shapes[19]=
{
{0x88,0xc0,0x0,1}, //L
{0xe8,0x0,0x0,2},
{0xc4,0x40,0x0,3},
{0x2e,0x0,0x0,0},

{0x44,0xc0,0x1f,5}, //反L
{0x8e,0x0,0x1f,6},
{0xc8,0x80,0x1f,7},
{0xe2,0x0,0x1f,4},

{0x8c,0x40,0xf81f,9}, //反Z
{0x6c,0x0,0xf81f,8},

{0x4c,0x80,0xffe0,11}, //Z
{0xc6,0x0,0xffe0,10},

{0x4e,0x0,0x7ff,13}, //凸
{0x8c,0x80,0x7ff,14},
{0xe4,0x0,0x7ff,15},
{0x4c,0x40,0x7ff,12},

{0x88,0x88,0xf800,17}, //长条
{0xf0,0x0,0xf800,16},

{0xcc,0x0,0xf81f,18} //立方体
};
}Tet_Struct;


首先声明了一个结构体Sha_Struct,然后另外一个结构体里面声明了一个结构体组Sha_Struct shapes[19]=
但是为什么编译器说这里有错误,expected a ";" 到底是为什么呢?
...全文
1100 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2013-02-25
  • 打赏
  • 举报
回复

typedef struct
{
 u8 box[2];
 u16 color;
 u8 next;
}Sha_Struct;
  
  
typedef struct
{
  u16 rdm;
  u16 posx,posy;
  Sha_Struct shapes[19];
}Tet_Struct;
 
Tet_Struct tmp = 
{
    20,   //初始化rdm
    20,   //初始化posx
    20,   //初始化posy
  {       //初始化shapes
   {0x88,0xc0,0x0,1},   //L
   {0xe8,0x0,0x0,2},
   {0xc4,0x40,0x0,3},
   {0x2e,0x0,0x0,0},
  
   {0x44,0xc0,0x1f,5},  //反L
   {0x8e,0x0,0x1f,6},
   {0xc8,0x80,0x1f,7},
   {0xe2,0x0,0x1f,4},
  
   {0x8c,0x40,0xf81f,9}, //反Z
   {0x6c,0x0,0xf81f,8},
  
   {0x4c,0x80,0xffe0,11}, //Z
   {0xc6,0x0,0xffe0,10},
  
   {0x4e,0x0,0x7ff,13},      //凸
   {0x8c,0x80,0x7ff,14},
   {0xe4,0x0,0x7ff,15},
   {0x4c,0x40,0x7ff,12},
  
   {0x88,0x88,0xf800,17},  //长条
   {0xf0,0x0,0xf800,16},
  
   {0xcc,0x0,0xf81f,18} //立方体
  }  
};    //这儿应该是有";"
自信男孩 2013-02-25
  • 打赏
  • 举报
回复
楼主这样定义结构体是不对的,第二个结构体还是在声明,不能在声明结构体中初始化; 参考下下面的声明、定义和初始化;

typedef struct
{
 u8 box[2];
 u16 color;
 u8 next;
}Sha_Struct;
 
 
typedef struct
{
  u16 rdm;
  u16 posx,posy;
  Sha_Struct shapes[19];
}Tet_Struct;

Tet_Struct tmp = 
{
    20,   //初始化rdm
    20,   //初始化posx
    20,   //初始化posy
  {       //初始化shapes
   {0x88,0xc0,0x0,1},   //L
   {0xe8,0x0,0x0,2},
   {0xc4,0x40,0x0,3},
   {0x2e,0x0,0x0,0},
 
   {0x44,0xc0,0x1f,5},  //反L
   {0x8e,0x0,0x1f,6},
   {0xc8,0x80,0x1f,7},
   {0xe2,0x0,0x1f,4},
 
   {0x8c,0x40,0xf81f,9}, //反Z
   {0x6c,0x0,0xf81f,8},
 
   {0x4c,0x80,0xffe0,11}, //Z
   {0xc6,0x0,0xffe0,10},
 
   {0x4e,0x0,0x7ff,13},      //凸
   {0x8c,0x80,0x7ff,14},
   {0xe4,0x0,0x7ff,15},
   {0x4c,0x40,0x7ff,12},
 
   {0x88,0x88,0xf800,17},  //长条
   {0xf0,0x0,0xf800,16},
 
   {0xcc,0x0,0xf81f,18} //立方体
  };  
} 
赵4老师 2013-02-25
  • 打赏
  • 举报
回复
偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。” 的方法解决的。
xxb249 2013-02-25
  • 打赏
  • 举报
回复
无代码 无真相
rocktyt 2013-02-25
  • 打赏
  • 举报
回复
{0x88,0xc0,0x0,1}, 改成 {{0x88,0xc0},0x0,1}, box也是数组 这样试试
zjtzlqr 2013-02-25
  • 打赏
  • 举报
回复
引用 3 楼 rocktyt2 的回复:
expected a ";"这句错误在哪一行呢
在第13行
rocktyt 2013-02-25
  • 打赏
  • 举报
回复
expected a ";"这句错误在哪一行呢
zhuyf87 2013-02-25
  • 打赏
  • 举报
回复
typedef在定义新类型的时候,直接对struct成员进行初始化?没这么用过。 不清楚标准支不支持,楼主是什么编译器。 我觉得像9楼那样,用的“正常”点挺好。
yzlovme 2013-02-25
  • 打赏
  • 举报
回复
结构体申明的时候是不需要初始化的
zjtzlqr 2013-02-24
  • 打赏
  • 举报
回复
但是没有看到有未定义的类型或者变量啊
AnYidan 2013-02-24
  • 打赏
  • 举报
回复
可能是此句 (前)有未定义的 类型 或 变量

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧