typedef struct问题

时间:2010-03-01 05:50:07

标签: c++ struct

我是c ++的新手,如何在下面编写代码(编译没有语法错误)?

typedef struct _PersonA{
    char name[128];
    LPPersonB rel;
}PersonA, *LPPersonA;

typedef struct _PersonB{
    char name[128];
    LPPersonA rel;
}PersonB, *LPPersonB;

请不要问我为什么需要这样做,因为这只是解释我问题的一个例子。

3 个答案:

答案 0 :(得分:5)

你必须转发声明:

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。此名称是为编译器保留的,因为它以下划线后跟大写字母开头。

就是这样。顺便说一下,隐藏在typedef背后的指针通常被认为是坏的。

答案 1 :(得分:3)

当您声明构造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;
};

答案 2 :(得分:1)

有几种方法。一个是:

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;
};
相关问题