我定义了两个类型
typedef stuct
{
int nMember1;
PBBB pMember2;
}AAA, *PAAA;
typedef struct
{
int nMember1;
PAAA pMember2;
}BBB, *PBBB
这样两个类型怎么声明?
|
|
|
struct AAA; struct BBB; typedef AAA* PAAA; typedef BBB* PBBB; struct AAA { int nMember1; PBBB pMember2; }; struct BBB { int nMember1; PAAA pMember2; };
|
|
|
支持楼上的,至少其中有一个当中包含的是另外一个结构的指针
否则就是死循环了
|
|
|
向 fiftymetre(闲人的小乖乖) :
一定要给结构取名字吗?就是
一定要
struct AAA
{.....};
而不能
typedef sturct
{...}AAA;
|
|
|
可以啊,那么以后你要声明一个这种类型的变量a的话,就只需要写AAA a了。
如:
#include <iostream>
using namespace std;
typedef struct{
int i;
char c;
}AAA;
int main()
{
AAA a;
a.i = 3;
a.c = 'A';
cout << a.i << endl;
return 0;
}
#include <iostream>
using namespace std;
typedef struct{
int i;
char c;
}AAA;
int main()
{
AAA a;
a.i = 3;
a.c = 'A';
cout << a.i << endl;
return 0;
}
|
|
|
前置声明加指针, 声明指针变量不需要对象完全定义,只要声明。 就不会造成死循环。
|
另记:
最后自己测试时遇到问题:
#include <stdio.h>
struct aaa;
typedef aaa *bbb;
struct aaa{
int a;
char b[4];
};
int main()
{
aaa t_a;
bbb t_b = &t_a;
t_a.a = 6;
printf("t_b->a = %d\n",t_b->a);
t_a.a = 14;
printf("t_b->a = %d\n",t_b->a);
}
尝试几次才发现语法错误,
更正之后编译运行无误:
#include <stdio.h>
struct aaa;
typedef struct aaa bbb,*ccc;
struct aaa{
int a;
char b[4];
};
int main()
{
bbb t_a;
ccc t_b = &t_a;
t_a.a = 6;
printf("t_b->a = %d\n",t_b->a);
t_a.a = 14;
printf("t_b->a = %d\n",t_b->a);
}