C嵌套结构相关

时间:2017-02-03 09:27:45

标签: c struct declaration

我有以下代码:

#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;
  ^

这是正常的,但我无法想出解决这个问题的方法。

4 个答案:

答案 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];
};