我有以下代码:
#define MAX_VIDEOS 100
typedef struct video_t {
int likes;
int dislikes;
char* title;
user_t* uploader;
} video_t;
typedef struct user_t {
char* username;
char* password;
video_t videos[MAX_VIDEOS];
} user_t;
我想在user_t
中使用video_t
,反之亦然。
在每种情况下,gcc
只是说"unknown type name"
:
youtube.c:9:5:错误:未知类型名称'user_t'
user_t* uploader; ^
这是正常的,但我无法想出解决这个问题的方法。
答案 0 :(得分:3)
您需要转发声明 user_t
:
#define MAX_VIDEOS 100
typedef struct user_t user_t;
typedef struct video_t {
int likes;
int dislikes;
char* title;
user_t* uploader;
} video_t;
typedef struct user_t {
char* username;
char* password;
video_t videos[MAX_VIDEOS];
} user_t;
答案 1 :(得分:1)
转发声明user_t
type-alias:
typedef struct user_t user_t;
之后,您可以在user_t *uploader
结构中使用video_t
。
答案 2 :(得分:1)
在开头移动缺失类型的类型定义。这可以确保编译器在使用时了解类型。
像
这样的东西 typedef struct user_t user_t;
然后,稍后,只需声明结构,typedef
已经存在。
在显示的片段的开头可以解决问题。就这样
struct video_t
时,user_t
已知并且typedef video_t
已定义。struct user_t
时,video_t
已知。所以,两个人都结束了。
答案 3 :(得分:1)
第一个struct
不知道user_t
的签名(向前宣布)
更改为
#define MAX_VIDEOS 100
typedef struct user_t user_t;
typedef struct video_t {
int likes;
int dislikes;
char* title;
user_t* uploader;
} video_t;
struct user_t {
char* username;
char* password;
video_t videos[MAX_VIDEOS];
};