4

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

typedef struct {
    Portal portals[10];
} Room;

typedef struct {
    Room *destinationRoom;
} Portal;

关于如何实现这一目标的任何建议?我尝试在文件顶部添加前向声明,struct Portal;但没有帮助。


使用以下代码:

typedef struct Room Room;
typedef struct Portal Portal;

struct Room {
    Portal portals[10];
};

struct Portal {
    Room *destinationRoom;
};

给我这个错误:

parse error: token -> 'Room' ; column 11
*** Error in `/opt/gbdk/bin/sdcc': munmap_chunk(): invalid pointer: 0xbfe3b651 ***
4

1 回答 1

5

Room重新排序定义并为and类型编写前向声明Portal

typedef struct Room Room;
typedef struct Portal Portal;

struct Portal {
    Room *destinationRoom;
};

struct Room {
    Portal portals[10];
};

请注意,我将typedef Portal与实际struct Portal定义分开以保持一致性,即使这不是绝对必要的。

另请注意,这种风格与 C++ 兼容,其中 typedef 是隐式的,但可以以这种方式显式编写,或者使用简单的前向声明,如struct Room;

如果由于某种原因你不能对struct标签和使用相同的标识符typedef,你应该这样声明结构:

typedef struct Room_s Room;
typedef struct Portal_s Portal;

struct Portal_s {
    Room *destinationRoom;
};

struct Room_s {
    Portal portals[10];
};
于 2015-10-10T23:04:58.077 回答