不允许指向不完整类型的指针,定义全局结构

时间:2010-12-07 22:50:58

标签: c pointers struct

我有困难,我不能在其他.c文件中使用struct指针, 总是当我将指向结构的指针传递给不在与结构相同的.c文件中的函数时,它会让我烦恼这些消息。当我无法从其他.c文件访问一个结构的struct成员时,我也是 我究竟做错了什么?我的包括?这是我的两个结构.h文件:

Server.h:

#ifndef SERVER_H
#define SERVER_H
typedef struct Server_s* Server;

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Company.h"
#include "Client.h"
#include "Order.h"
#include "SMSServer.h"
#include "MMSServer.h"

Server InstallServer(CompanyL pcompanyList , ClientL pclientList , OrderL porderList);
void RunServer(Server pmainServer);
void OrdersToDoPerTimestamp(FILE *result , Server pmainServer , int currentTimestamp);
#endif

Client.h:

#ifndef _CLIENT_H
#define _CLIENT_H
typedef struct Client_s* Client;
typedef struct ClientNODE* ClientL;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Server.h"
ClientL InstallClients(CompanyL pcompanyList , char* pfileName);
void AppendClientNode(ClientL pclientList , CompanyL pcompanyList , char* ptelNumber , char* pclientType , char* pclientCredit);
Client FindClient(ClientL pclientList, char* pclientTelNumber);
double getCostAndChargeSMSMessage(Client sourceNumber , Company sourceNumberCompany);
#endif

我可以在其他.c文件中创建一个敲击类型,但后来无法访问其成员? 请指导一下。

2 个答案:

答案 0 :(得分:4)

如果要将访问结构成员提供给其他文件,则必须将完整的结构定义放入头文件中。 E.g:

#ifndef SERVER_H
#define SERVER_H
struct Server_s {
    int id;
};
typedef struct Server_s* Server;
#endif

您当前使用的无定义习惯用于隐藏外部用户的实现细节:其他人可以传递和接收指向结构的指针,但只有定义文件(Server.c)才能使用struct成员。 / p>

答案 1 :(得分:1)

如果定义可用,您只能访问struct成员,因此如果要从多个c文件访问它们,则必须在标题中定义它。