今、私はシステムプログラミングに関するコースのプロジェクトに取り組んでいます。私たちは、RealtorsとCustomersと一緒にアパートを売るプラットフォームをプログラムするように求められました。私はEclipseで作業しています。ヘッダーファイルが異なるヘッダーファイルからtypedefを認識しない
これまでのような問題は発生しませんでしたが、私のヘッダーファイルの1つでは、2番目のヘッダーファイルのtypedefを認識できません。
説明:ここに私のファイルがあります。
Realtor.h
#include "apartment.h"
#include "apartment_service.h"
#include "Report.h"
#include "Customer.h"
#include "mtm_ex2.h"
typedef struct realtor_t* Realtor;
これにより、第2のヘッダファイルであるが、
Customer.h
#include "Report.h"
#include "Realtor.h"
#include "apartment.h"
#include "apartment_service.h"
#include "mtm_ex2.h"
typedef struct customer_t* Customer;
MtmErrorCode purchaseApartment (Customer customer, Realtor realtor,
ApartmentService service,
int apartment_id);
MtmErrorCode makeOffer (Customer customer, Realtor realtor, ApartmentService
service, int apartment_id, int new_price);
何らかの理由で
(customer_tとrealtor_tの構造体は、ソースファイルで定義されている)、Customer.hでの関数宣言は私に次のエラーを与えます: "不明なタイプ名 'Realtor' "です。同じ関数が "apartment_service.h"の 'ApartmentService'のような他のtypedefを使用するので、これは本当に奇妙です。
ヘッダーに円形の包含があるため、一部のガードが欠けています。これらの警備員は、これらの最初のエラーを撃墜するだけですか? – ckruczek
これに追加するには:ガードがあっても、 'Customer.h'に' Customer 'を含む 'Realtor.h'が含まれています。これは(おそらく守られている) 'Realtor.h 'を含んでいます。インクルードガードなしでは、これは全く機能しません。インクルージョンガードを使用すると、 'Realtor.h'の2番目のインクルードが終了し、' Realtor.h'の宣言なしで 'Customer.h'で終わることになります。 – dhke