2010-12-07 46 views
1

の不完全な型へのポインタは許されません。他の.cファイルの構造体ポインタを扱うことができません。 構造体へのポインタを常に渡すときに同じではありません。そのようなメッセージを私に迷惑をかける構造体としてのCファイル。また、他の.cファイルから構造体のstructメンバーにアクセスできない場合は、私は 何をやっているのですか?私の含む?私は他の.cファイルに1つの打たタイプを作成することができますグローバル構造体を定義するグローバル構造体

#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 

、しかし:

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それは私の構造体の二つが.hファイル、たとえばです後でメンバーにアクセスすることはできませんか? 私を少し案内してください。

+1

実際のエラーメッセージの内容と、コンパイラがどのような行について不平を言っているかを示すと非常に役に立ちます。また、実際に 'Server'、' Client'、 'Client_s'の' struct'定義はありますか? – birryree

+0

実際にstructをどこにも定義していないようです。また、コードを正しくフォーマットしてください。 – OrangeDog

+0

'struct Server_s'と' struct Client_s'を同じにするつもりですか? – wallyk

答えて

4

他のファイルに構造体メンバをアクセスさせたい場合は、完全な構造体定義をヘッダファイルに配置する必要があります。例:

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

あなたは現在、外部のユーザーから実装の詳細を隠すために意図された使用している定義レスイディオム:することができます他の人は、構造体へのポインタを渡し、受け取ることができますが、唯一の定義ファイル(Server.c)構造体メンバを使用します。

+0

ありがとうございます!最終的に私はいつも間違っていたことを理解することができます。チェックするつもり... –

1

structメンバーにアクセスできるのは、定義が利用可能な場合のみです。したがって、複数のcファイルからアクセスする場合は、ヘッダーに定義する必要があります。

+0

ok、どうやって定義すればいいですか?私はすでに私が思った、私はそれをstruct.hファイルで定義し、私は他の.cファイルからインクルードされる他の.hファイルでそれが必要な場所に含める。十分ではありませんか? –

+0

あなたはstruct.hファイルを提供していませんが、それが正しいかどうかをどのように知っていますか? – OrangeDog

+0

ヘッダファイルに構造体を定義するのは、ソースファイルで定義するのと同じですか? – shinzou

関連する問題