typedef 的一个错误
2017-03-14 本文已影响0人
郭青耀
请看下面一个结构体定义,它会在什么时候报错?
typedef struct tagST
{
int a;
int b;
typdef union
{
struct BF *pstNew;
}new;
}XXX;
如果你能答道是在 “typdef union” 行报错,而且也知道是为什么,那么你就没有必要看下去了。否则请继续……
错误在于:
typedef struct tagST
{
int a;
int b;
typdef union
{
struct BF *pstNew;
}new; /这里只是声明/
}XXX;
于是声明中嵌套声明,是不是很奇怪,这里面需要的是一个定义,而不是声明。
正确的写法
typedef struct tagST
{
int a;
int b;
union
{
struct BF *pstNew;
}new; /这里是一个匿名的union 定义/
}XXX;
另外一种正确的写法
typdef union
{
struct BF *pstNew;
}newST;
typedef struct tagST
{
int a;
int b;
newST stNew;
}XXX;
声明了一个 union ,然后在结构体里面使用。