C 学生和课程链接列表中的问题

C 学生和课程链接列表中的问题,c,linked-list,C,Linked List,我创建了一个课程链接列表,我正试图编写一个函数来创建或更新学生链接列表,但在这个函数中,我引用了我的课程列表,称为“课程列表”。但是我在标有“***”的行中得到了这个错误:“不允许使用指向不完整类类型的指针”。有人能告诉我我的功能有什么问题吗 struct Grade { char courseNumber[6]; char grade[4]; struct Grade* next; }; struct Student { char studentName[2

我创建了一个课程链接列表,我正试图编写一个函数来创建或更新学生链接列表,但在这个函数中,我引用了我的课程列表,称为“课程列表”。但是我在标有“***”的行中得到了这个错误:“不允许使用指向不完整类类型的指针”。有人能告诉我我的功能有什么问题吗

struct Grade
{
    char courseNumber[6];
    char grade[4];
    struct Grade* next;
};


struct Student
{
    char studentName[20];
    struct Grade* studentGrades;
    struct student* next;
};


struct Course
{
    char courseNumber[6];
    char courseName[31];
    struct Course* next;
};


struct Student* updateStudentsList(char studentDetails[], struct Student* studentsList)
{
    int i = 0, j = 0, r = 0, k = 0, p = 0, c = 0, g = 0, bool = 1, isStudentExist = 1;
    char* studentName = " ";
    char* courseNumHolder = " ";
    char* gradeHolder = " ";
    struct Student* head = studentsList;
    if (studentsList == NULL)
    {
        studentsList = (struct Student*)malloc(sizeof(struct Student));
        if (studentsList == NULL)
            return studentsList;
        while (studentDetails[i] != ':')
        {
            studentsList->studentName[i] = studentDetails[i];
            i++;
        }
        studentsList->studentName[i] = '\0';
        studentsList->next = NULL;
        struct Grade* gradeHead = studentsList->studentGrades;
        while (studentDetails[i] != '\n')
        {
            if (studentDetails[i] == ':' || studentDetails[i] == ';')
            {
                studentsList->studentGrades = (struct Grade*)malloc(sizeof(struct Grade));
                if (studentsList->studentGrades == NULL)
                    return studentsList;
                i++;
            }
            while (studentDetails[i] != ',')
            {
                studentsList->studentGrades->courseNumber[j] = studentDetails[i];
                i++;
                j++;
            }
            studentsList->studentGrades->courseNumber[j] = '\0';
            while (studentDetails[i] != ';')
            {
                studentsList->studentGrades->grade[r] = studentDetails[i];
                i++;
                r++;
            }
            studentsList->studentGrades->grade[r] = '\0';
            studentsList->studentGrades = studentsList->studentGrades->next;
        }
        studentsList->studentGrades = gradeHead;
        return studentsList;
    }
    else
    {
        while (studentDetails[i] != ':')
        {
            studentName[p] = (char)malloc(sizeof(char));
            studentName[p] = studentDetails[i];
            i++;
            p++;
        }
        studentName[p] = (char)malloc(sizeof(char));
        studentName[p] = '\0';
        while (studentDetails[i] != '\n')
        {
            while (studentDetails[i] != ',')
            {
                courseNumHolder[c] = (char)malloc(sizeof(char));
                courseNumHolder[c] = studentDetails[i];
                c++;
                i++;
            }
            while (studentDetails[i] != ';')
            {
                gradeHolder[g] = (char)malloc(sizeof(char));
                gradeHolder[g] - studentDetails[i];
                g++;
                i++;
            }
            while (studentsList->next != NULL)
            {
                if (strcmp(studentName, studentsList->studentName) == 0)
                {
                    isStudentExist = 0;
                    while (studentsList->studentGrades != NULL)
                    {
                        if (strcmp(courseNumHolder, studentsList->studentGrades->courseNumber) == 0)
                        {
                            strcpy(studentsList->studentGrades->grade, gradeHolder);
                            bool = 0;
                        }
                        else if (studentsList->studentGrades->next == NULL && bool == 1)
                        {
                            studentsList->studentGrades->next = (struct Grade*)malloc(sizeof(struct Grade));
                            if (studentsList->studentGrades->next == NULL)
                                return studentsList;
                            strcpy(studentsList->studentGrades->next->courseNumber, courseNumHolder);
                            strcpy(studentsList->studentGrades->next->grade, gradeHolder);
                        }
                        studentsList->studentGrades = studentsList->studentGrades->next;
                    }
                }
                else if (studentsList->next == NULL && isStudentExist == 1)
                {
                    studentsList->next = (struct Student*)malloc(sizeof(struct Student));
                    if (***studentsList->***next == NULL)
                        return studentsList;
                    strcpy(***studentsList***->next->studentName, studentName);
                    studentsList->next->studentGrades = (struct Grade*)malloc(sizeof(struct Grade));
                    if (***studentsList-***>next->studentGrades == NULL)
                        return studentsList;
                    strcpy***(studentsList->***next->studentGrades->courseNumber, courseNumHolder);
                    strcpy(***studentsList-***>next->studentGrades->grade, gradeHolder);
                }
                studentsList = studentsList->next;

            }
            studentsList = head;
        }
    }
}

Student
struct定义内部,您的字段next指向
Student
,而不是
Student
,因此它指向一个未定义的结构。

Student
结构定义内部,您的字段next指向
Student
,而不是
Student
,因此,它指向一个未定义的结构。

那些
***
s会造成更多的混乱而不是清晰,如果找不到问题,最好发布错误和行(没有任何*s)以及相关代码,你需要发布最小值reproducable@Netanel结构Student下一个数据成员声明中有一个输入错误。如果找不到问题,那些
***
s会造成更多的混乱而不是清晰,最好发布错误和行(没有任何*s)以及相关代码,你需要发布最小值reproducable@Netanel结构Student下一个数据成员声明中有一个输入错误。谢谢!它解决了我的问题谢谢!它解决了我的问题