簡體   English   中英

typedef struct問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM