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

就是这样。顺便说一句,将指针隐藏在typedef的后面通常被认为是不好的。

关于c++ - typedef结构问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2354103/

10-11 19:19
查看更多