我遇到了一个问题,试图嵌套需要声明为新var类型的结构。密码如下-
typedef struct
{
typedef struct
{
int day,
month,
year;
} Date;
Date manuDate,
purDate;
double purPrice;
} Car;
但当我试图编译时,它会向我抛出一个错误
由于进一步下降,导致了“that之前的语法错误”和其他一些错误。
这是C不能做的事吗?我知道在没有指针的情况下嵌套结构有问题,但我不确定在这种情况下如何工作.
发布于 2015-05-03 16:12:12
C不支持嵌套结构定义。也许您是在看一些C++代码。
相反,您只需先定义“内部”结构,然后在“外部”结构中引用它。
typedef struct
{
int day,
month,
year;
} Date;
typedef struct
{
Date manuDate,
purDate;
double purPrice;
} Car;
发布于 2020-08-29 15:51:24
C确实有嵌套的结构/联合/枚举,但没有嵌套的类型。
struct A { typedef struct B { int x; } B; }; //WRONG
struct A { struct { int x; } b; }; //OK - an anonymous nested struct w/ an instance
struct A { struct { int x; }; }; //OK - an anonymous nested struct w/out an instance; x effectively belongs to `struct A`
struct A { struct B { int x; } b; }; //OK, the `struct B` type also becomes available in the outer scope
struct A { struct B { int x; }; }; //WRONG, a tagged nested struct needs at least 1 instance
嵌套的结构/联合/枚举既可以是匿名的(无标记的),也可以是外部结构/联合的一部分,或者是标记的一部分。
匿名内部结构/联合也可以在不定义实例的情况下逃脱,在这种情况下,内部成员递归地成为外部结构/联合的成员。
带标记的嵌套结构/union/enum需要实例,它就像带有实例的匿名嵌套结构/union/enum,但标记类型也可供以后使用,其行为就好像它是一个独立的外部范围结构/联合/枚举定义。
明智的做法可能是简单地将一个带标记的结构/union/enum放在外部作用域中,而不是将其嵌套在另一个结构/union中。
发布于 2019-07-20 22:15:20
它不工作,因为这是一个严格的OOP特性。C不是OO。如果您从内部结构中移除'typedef‘,并将其在’in‘声明中的使用替换为'void*',它将编译。因此,如果你想做疯狂的OOP风格的嵌套,你将不得不利用你的'void*‘-在C中没有其他方法可以做到。
如果你真的想要做嵌套的事情,你必须移除the。您可以做的是使用未命名的结构在主结构中创建结构化变量。
示例:
typedef struct ObjectType {
float width;
float height;
float x;
float y;
//Nested Struct
struct {
float r;
float g;
float b;
float a;
} color; //color is a variable
} Object;
https://stackoverflow.com/questions/30020859
复制相似问题