Неполный тип структурной проблемы с вложенными структурами - PullRequest
0 голосов
/ 21 марта 2019

У меня мало проблем со структурами.Вот мой структурный блок:

#define STD_NAME 30
#define COURSE_LIMIT 10
#define COURSE_NAME 50
#define COURSE_CODE 6
#define COURSE_ACRONYM 8

typedef struct {
    int course_id;
    char* course_name[COURSE_NAME];
    char* course_code[COURSE_CODE];
    char* course_acronym[COURSE_ACRONYM];
    int quota;    
}course_t;

typedef struct {
    int std_id;
    char std_name[STD_NAME];
    double std_gpa;
    struct course_t* courses[COURSE_LIMIT]; //nesting part

}student_t;

Я пытаюсь использовать вложенные структуры и указатели.Например, чтобы получить квоту курсов, я использую простой блок в основной функции, например:

int main(void){

   student_t studentProfile;

    for(int i = 0; i < COURSE_LIMIT; i++)
    {
        printf("Enter the %d. course quota: ", i + 1);
        scanf("%d", &studentProfile.courses[i]->quota);
    }

    return 0;
}

Но когда я компилирую этот код, я получаю сообщение об ошибке:

dereferencing pointer to incomplete type ‘struct course_t’
         scanf("%d", &studentProfile.courses[i]->quota);

Iне знаю, как исправить «указатель на неполный тип», потому что он немного путает с указателями.Должен ли я использовать выделение памяти?

1 Ответ

0 голосов
/ 21 марта 2019
typedef struct {
    int std_id;
    char std_name[STD_NAME];
    double std_gpa;
    struct course_t* courses[COURSE_LIMIT]; //nesting part
  //^^^^^^^^^^^^^^^^
}student_t;

На данный момент нет такого типа, как struct course_t.Существует только тип course_t;они не являются взаимозаменяемыми.

Эта строка должна быть просто

    course_t* courses[COURSE_LIMIT];
...