【发布时间】:2012-06-14 14:42:20
【问题描述】:
我有一个在现有 typedef 结构中定义 typedef 结构的程序,我想知道为什么会出现编译错误。
这是程序:
typedef struct Outer
{
typedef struct Inner
{
int b;
}INNER;
INNER inner;
int a;
}OUTER;
int main()
{
OUTER obj;
obj.a = 10;
obj.inner.b=8;
return 0;
}
编译时出现以下错误::
test.c:3:5: error:expected specifier-qualifier-list before ‘typedef’
test.c: In function ‘main’:
test.c:17:5: error: ‘OUTER’ has no member named ‘a’
test.c:18:5: error: ‘OUTER’ has no member named ‘inner’
但是,当我将程序更改为
typedef struct Outer
{
struct Inner
{
int b;
};
struct Inner inner;
int a;
}OUTER;
int main()
{
OUTER obj;
obj.a = 10;
obj.inner.b=8;
return 0;
}
编译成功。
为什么内部结构不允许使用 typedef?
【问题讨论】:
-
哪个编译器?哪个平台?
-
因为这是标准?
-
您应该在第一个示例的第 3 行收到编译错误。如果不是,您使用的是 C++ 编译器,但 C++ 编译器会接受整个程序。
-
@JonathanLeffler gcc 版本 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)