所以我做了一个结构来保存有关客户端的信息。标题中出现上述编译器错误。如果我陈述任何不正确的情况,我仍然在学习指针,所以请耐心等待。从我所知道的,我的typedef有一个指向客户端实例的指针。这意味着我需要使用 - >而不是。为客户的领域。但是那也行不通,我会得到dereferencing to incomplete type
的错误。任何指导或帮助都会很棒!我无法弄清楚的常见C问题:请求会员的东西不是结构或工会
Client.h
#ifndef CLIENT_H
#define CLIENT_H
typedef struct client_tag *Client;
#endif
Client.c
#include "client.h"
struct client_tag {
char id[5];
char name[30];
char email[30];
char phoneNum[15];
};
以下文件从文件中读取客户信息,并将它们分配给变量:
#include "client.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
Client client1 = malloc(sizeof(Client));
FILE *fp;
ListType clientList;
fp = fopen("clients.txt", "r");
int lineSize = 200;
char* line = malloc(lineSize);
char* line2 = malloc(lineSize);
char* line3 = malloc(lineSize);
char* line4 = malloc(lineSize);
while (fgets(line, lineSize, fp) != NULL) {
strcpy(client1.id, line);
strcpy(client1.name, fgets(line2, lineSize, fp));
strcpy(client1.email, fgets(line3, lineSize, fp));
strcpy(client1.phoneNum, fgets(line4, lineSize, fp));
push(clientList, (void*)&client1);
printf("ID: %s", line);
printf("Name: %s", line2);
printf("Email: %s", line3);
printf("Phone Number: %s\n", line4);
free(line);
free(line2);
free(line3);
free(line4);
line = malloc(lineSize);
line2 = malloc(lineSize);
line3 = malloc(lineSize);
line4 = malloc(lineSize);
}
}
以下是错误我得到:
clientDriver.c: In function ‘main’:
clientDriver.c:23:17: error: request for member ‘id’ in something not a structure or union
strcpy(client1.id, line);
^
clientDriver.c:24:17: error: request for member ‘name’ in something not a structure or union
strcpy(client1.name, fgets(line2, lineSize, fp));
^
clientDriver.c:25:17: error: request for member ‘email’ in something not a structure or union
strcpy(client1.email, fgets(line3, lineSize, fp));
^
clientDriver.c:26:17: error: request for member ‘phoneNum’ in something not a structure or union
strcpy(client1.phoneNum, fgets(line4, lineSize, fp));
这是一个指针,使用' - >'not'.'。 –
try&client1-> name [0] ...记住strcpy中client1之前的“&” – morcillo
为什么'client.c'中的typedef struct client_tag * Client;'而不是Client.h'?该typedef除了'Client.c'外本身并不适用于任何地方。 – user2357112