首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GBDK C中类型胡枝子结构的正演声明

GBDK C中类型胡枝子结构的正演声明
EN

Stack Overflow用户
提问于 2015-10-10 22:57:50
回答 1查看 441关注 0票数 4

我正在使用GBDK C为原来的游戏男孩创建一个游戏,我遇到了一个小问题。我游戏中的每个房间都需要有不同的portals,但是每个portal都需要引用一个房间。下面是代码的缩减版本:

代码语言:javascript
复制
typedef struct {
    Portal portals[10];
} Room;

typedef struct {
    Room *destinationRoom;
} Portal;

对于如何做到这一点,有什么建议吗?我尝试将struct Portal;的前向声明添加到文件的顶部,但没有帮助。

使用以下代码:

代码语言:javascript
复制
typedef struct Room Room;
typedef struct Portal Portal;

struct Room {
    Portal portals[10];
};

struct Portal {
    Room *destinationRoom;
};

给我这个错误:

代码语言:javascript
复制
parse error: token -> 'Room' ; column 11
*** Error in `/opt/gbdk/bin/sdcc': munmap_chunk(): invalid pointer: 0xbfe3b651 ***
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-10 23:04:58

重新排序定义并为RoomPortal类型编写一个前向声明:

代码语言:javascript
复制
typedef struct Room Room;
typedef struct Portal Portal;

struct Portal {
    Room *destinationRoom;
};

struct Room {
    Portal portals[10];
};

注意,为了一致性,我将typedef Portal从实际的struct Portal定义中分离出来,尽管它不是严格必要的。

还请注意,这种样式与C++兼容,在这种情况下类型胡枝子f是隐式的,但可以以这种方式显式地写入,或者使用简单的前向声明(如struct Room; )。

如果由于某种原因不能对struct标记和typedef使用相同的标识符,则应该以如下方式声明结构:

代码语言:javascript
复制
typedef struct Room_s Room;
typedef struct Portal_s Portal;

struct Portal_s {
    Room *destinationRoom;
};

struct Room_s {
    Portal portals[10];
};
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33059819

复制
相关文章

相似问题

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