C - Вложенные связанные списки - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь создать связанный список учащихся, у каждого из которых есть связанный список оценок, но у меня возникают проблемы с доступом к связанному списку оценок внутри связанного списка студентов.

typedef struct student_data_struct{
    char student[MAX];
    struct grades_list_struct *gradeP;
} student_Data;

typedef struct student_list_struct{
    student_Data studentData;
    struct student_list_struct *next;
} StudentNode;

typedef struct grades_list_struct{
    int grade;
    struct grades_list_struct *next;
} GradeNode;

GradeNode *insertGrade(int grade, GradeNode *head){
    GradeNode *newNode=NULL;
    newNode=(GradeNode*)calloc(1, sizeof(GradeNode));

    if(head!=NULL){
        newNode->grade=grade;
        newNode->next=head;
        return newNode;
    } else {
        newNode->grade=grade;
        newNode->next=NULL;
        return newNode;
    }
}

StudentNode *insertStudent(char studentName[MAX], int studentGrade, StudentNode *head){
    StudentNode *newNode=NULL;
    newNode=(StudentNode*)calloc(1, sizeof(StudentNode));
    newNode->studentData->gradeP=(GradeNode*)calloc(1, sizeof(GradeNode));

    if (head==NULL){
        strcpy(newNode->studentData.student, studentName);
        newNode->next=NULL;
        newNode->studentData->gradeP=insertGrade(studentGrade, newNode->studentData->gradeP);
        return newNode;
    } else {
        strcpy(newNode->student, studentName);
        newNode->gradeP->grade=studentGrade;
        newNode->studentData->gradeP=insertGrade(studentGrade, newNode->studentData->gradeP);
        return newNode;
    }
}

Когда я пытаюсь выделить память для указателя оценки,

newNode->studentData->gradeP=(GradeNode*)calloc(1, sizeof(GradeNode));

Я получаю ошибку:

error: invalid type argument of '->' (have 'student_Data' {aka 'struct student_data_struct'})

Также, когда я пытаюсьукажите оценку для студента,

newNode->studentData->gradeP=insertGrade(studentGrade, newNode->studentData->gradeP);

Я получаю ошибку:

error: invalid type argument of '->' (have 'student_Data' {aka 'struct student_data_struct'})

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Вы получаете доступ к элементу структуры с символом указателя.Попробуйте написать, как указано ниже: -

newNode->studentData.gradeP=(GradeNode*)calloc(1, sizeof(GradeNode));

newNode->studentData.gradeP=insertGrade(studentGrade, newNode->studentData.gradeP);
0 голосов
/ 21 февраля 2019

studentData имеет тип структуры и не является указателем на структуру.Следовательно, оператор доступа к элементу структуры (.) должен использоваться вместо оператора для доступа к элементам указателя на структуру (->).

...