首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >嵌套型胡枝子结构

嵌套型胡枝子结构
EN

Stack Overflow用户
提问于 2015-05-04 00:09:04
回答 4查看 8.1K关注 0票数 6

我遇到了一个问题,试图嵌套需要声明为新var类型的结构。密码如下-

代码语言:javascript
运行
复制
typedef struct
{
    typedef struct
    {
        int day,
            month,
            year;
    } Date;

    Date manuDate,
         purDate;
    double purPrice;
} Car;

但当我试图编译时,它会向我抛出一个错误

由于进一步下降,导致了“that之前的语法错误”和其他一些错误。

这是C不能做的事吗?我知道在没有指针的情况下嵌套结构有问题,但我不确定在这种情况下如何工作.

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-05-04 00:12:12

C不支持嵌套结构定义。也许您是在看一些C++代码。

相反,您只需先定义“内部”结构,然后在“外部”结构中引用它。

代码语言:javascript
运行
复制
typedef struct
{
    int day,
        month,
        year;
} Date;


typedef struct
{
    Date manuDate,
         purDate;
    double purPrice;
} Car;
票数 7
EN

Stack Overflow用户

发布于 2020-08-29 23:51:24

C确实有嵌套的结构/联合/枚举,但没有嵌套的类型。

代码语言:javascript
运行
复制
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中。

票数 7
EN

Stack Overflow用户

发布于 2019-07-21 06:15:20

它不工作,因为这是一个严格的OOP特性。C不是OO。如果您从内部结构中移除'typedef‘,并将其在’in‘声明中的使用替换为'void*',它将编译。因此,如果你想做疯狂的OOP风格的嵌套,你将不得不利用你的'void*‘-在C中没有其他方法可以做到。

如果你真的想要做嵌套的事情,你必须移除the。您可以做的是使用未命名的结构在主结构中创建结构化变量。

示例:

代码语言:javascript
运行
复制
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;
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30020859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档