Как решить «Массив имеет неполный тип элемента» на C

#arrays #c #struct #cs50

#массивы #c #структура #cs50

Вопрос:

Я работал над CS50 тем, что я делаю struct , чтобы позволить пользователю вводить и сохранять его в массиве. Тем не менее, я получаю

массив имеет неполный тип элемента struct person

Ниже приведена программа, над которой я работаю:

Телефонная книга.c

 #include<stdio.h>
#include<string.h>
#include<cs50.h>
#include<ctype.h>
#define MAX 4

typedef struct  
{
    char name[20];
    char number[8];
}person;

int main ()
{
    struct person ppl[MAX];
    int i;
    
    for(i = 0;i < MAX; i   )
    {
        printf("nEnter details of user %dnn", i 1);
        
        printf("Enter name: ");
        scanf("%s", ppl[i].name);
        
        printf("Enter phone number: ");
        scanf("%s", ppl[i].number);
    }
    
    printf("n");
    
    printf("NametPhone Numbern");
    
    for(i = 0; i < MAX; i  )
    {
        printf("%st%sn", ppl[i].name, ppl[i].number);
    }
    
    return 0;
}
 

Ошибка трассировки стека

 clang -ggdb3 -O0 -std=c11 -Wall -Werror -Wextra -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wshadow    Phonebook.c  -lcrypt -lcs50 -lm -o Phonebook
Phonebook.c:15:22: error: array has incomplete element type 'struct person'
    struct person ppl[MAX];
                     ^
Phonebook.c:15:12: note: forward declaration of 'struct person'
    struct person ppl[MAX];
           ^
1 error generated.
make: *** [<builtin>: Phonebook] Error 1
 

Как мне решить эту проблему? Пожалуйста, просветите меня по этому поводу

Ответ №1:

person является typedef для неназванной структуры. struct person не существует.

Либо опустить struct префикс: person ppl[MAX];

Или дайте неназванной структуре имя: typedef struct people (на этом этапе вы можете удалить typedef, если хотите ссылаться на структуру как struct people вместо people )

Комментарии:

1. Или typedef полностью удалить: struct person { ... }