#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 { ... }