[英]typedef struct problem
我是c ++的新手,如何在下面編寫代碼(編譯沒有語法錯誤)?
typedef struct _PersonA{
char name[128];
LPPersonB rel;
}PersonA, *LPPersonA;
typedef struct _PersonB{
char name[128];
LPPersonA rel;
}PersonB, *LPPersonB;
請不要問我為什么需要這樣做,因為這只是解釋我的問題的一個例子。
你必須轉發聲明:
struct _PersonB;
typedef struct _PersonA{
char name[128];
_PersonB* rel; // no typedef
}PersonA, *LPPersonA;
typedef struct _PersonB{
char name[128];
LPPersonA rel;
}PersonB, *LPPersonB;
那就是說,這非常......丑陋。 首先,C ++中不需要typedef:
struct PersonB;
struct PersonA
{
char name[128];
PersonB* rel;
};
struct PersonB
{
char name[128];
PersonA* rel;
};
這也有消除你的壞名字的_PersonA
: _PersonA
。 此名稱是為編譯器保留的,因為它以下划線后跟大寫字母開頭。
就是這樣。 順便說一句,隱藏在typedef背后的指針通常被認為是壞的。
當您聲明構造PersonA時,未定義LPPersonB。 你必須使用指針:
// declare this so the compiler know that struct _PersonaB exist (even if it does not know its implementation)
typedef struct _PersonaA PersonaA;
typedef struct _PersonaB PersonaB;
// define PersonaA
struct _PersonA{
char name[128];
PersonB *rel; // does not need to know personB implemenation since it is a pointer
} ;
// define PersonA
struct _PersonB{
char name[128];
PersonA *rel;
};
有幾種方法。 一個是:
typedef struct _PersonA PersonA, *PtrPersonA;
typedef struct _PersonB PersonB, *PtrPersonB;
struct _PersonA {
char name[128];
PtrPersonB rel;
};
struct _PersonB {
char name[128];
PtrPersonA rel;
};
另一個是:
struct _PersonA {
char name[128];
struct _PersonB *rel;
};
struct _PersonB {
char name[128];
struct _PersonA *rel;
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.