Gin*_*cob 12 c struct compiler-errors unions
在以下代码中:
typedef struct
{
union U
{
int a;
char b;
}U1;
}A;
typedef struct
{
union U
{
int a;
char b;
}U1;
}B;
Run Code Online (Sandbox Code Playgroud)
编译器给出错误"[错误]重新定义'union U'".但这些工会是不同结构的成员.因此通常不存在可变名称干扰的可能性.那么这个错误的原因是什么?
在那里没有名称与命名空间的分离,你实际上是在尝试重新定义.
片段:
typedef struct { union U { int a; char b; } U1; } A;
Run Code Online (Sandbox Code Playgroud)
这里没有显着差异:
union U { int a; char b; };
typedef struct { union U U1; } A;
Run Code Online (Sandbox Code Playgroud)
您可以通过简单地为您的类型引入人工命名空间来解决它:
typedef struct { union AU { int a; char b; } U1; } A;
typedef struct { union BU { int a; char b; } U1; } B;
Run Code Online (Sandbox Code Playgroud)
或者,如果工会的意思是(并将继续)同一类型,只是把它定义一次:
union U { int a; char b; };
typedef struct { union U U1; } A;
typedef struct { union U U1; } B;
Run Code Online (Sandbox Code Playgroud)
示例中的名称"U"是联合联合的名称,而"U1"是每个结构"A"和"B"中的联合实例的名称.U1可以重复使用,但名称"U"在整个文件中都有范围.
你可以做到这一点:
typedef struct
{
union U
{
int a;
char b;
}U1;
}A;
typedef struct
{
union U U1;
}B;
Run Code Online (Sandbox Code Playgroud)
因为A.U1和B.U1都有相同的声明.否则,您必须为联合使用不同的名称.
或者,只使用匿名联盟(即,根本不提供联盟的名称):
typedef struct
{
union
{
int a;
char b;
}U1;
}A;
typedef struct
{
union
{
int a;
char b;
}U1;
}B;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1198 次 |
| 最近记录: |