Указатель на неполный тип недопустим, определяя глобальную структуру - PullRequest
1 голос
/ 08 декабря 2010

Ну, у меня трудности, я не могу работать с указателями структуры в других файлах .c, всегда, когда я передаю указатели на структуры для функций, не находящихся в том же файле .c, что и структура, которая раздражает меня такими сообщениями.а также, когда я не могу получить доступ к членам структуры одной структуры из другого файла .c, я g, что я делаю неправильно?моя включает?это, например, два моих файла структуры .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 ]

4 голосов
/ 08 декабря 2010

Если вы хотите предоставить членам структуры доступа другие файлы, вы должны поместить полное определение структуры в заголовочный файл. Например:

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

Используемая в настоящее время идиома без определения предназначена для того, чтобы скрыть детали реализации от внешних пользователей: другие могут передавать и получать указатели на структуры, но только определяющий файл (Server.c) может использовать члены структуры.

1 голос
/ 08 декабря 2010

Вы можете получить доступ к элементам структуры, только если определение доступно, поэтому вам придется определять его в заголовке, если вы хотите получить к ним доступ из нескольких файлов c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...