C语言的联合体应用出错

时间:2022-09-05 18:34:13
#define MAX_FEATURE_NUM 42 
#define MAXNumber 70 
#define MAXLINE 500 
#define NUMBER 494021 
#define ERROR -1 
#define NULL -1 
typedef struct ArcBox 

int tail,head; 
struct ArcBox * hlink,* tlink; 
}ArcBox; 

typedef struct FeaNode 

char * feaname; 
int type; 
union range 

char * c_range[MAXNumber]; 
int i_range[MAXNumber]; 
double d_range[MAXNumber]; 
}; 
int indegree; 
int valuenum; 
int visit[MAXNumber]; 
struct ArcBox * parent,* child; 
}FeaNode; 

typedef struct 

struct FeaNode fealist[MAX_FEATURE_NUM]; 
int feanum,arcnum; 
}BayesNetwork; 

struct LNode 

int sequence; 
int valuenum; 
int n; 
int flag; 
int type; 
union Lrange 

char ** c_range; 
int * i_range; 
double * d_range; 
}; 
int * visit; 
struct LNode * next; 

}; 
typedef struct LNode * Linklist; 

Linklist CalParent (BayesNetwork * nb,int i) 

struct ArcBox * r; 
struct LNode * p,* q; 
Linklist head=(Linklist)malloc(sizeof(struct LNode)); 
if(!head) 

error ("No space for node can be obtained!"); 
return ERROR; 

p=head; 
r=(* nb).fealist[i].parent; 
while(r) 

q=(struct LNode *)malloc(sizeof(struct LNode)); 
if(!q) 

error("No space for node can be obtained!"); 
return ERROR; 

q->type=(* nb).fealist[r->tail].type; 
q->Lrange.d_range=(* nb).fealist[r->tail].range.d_range; 
q->visit=(* nb).fealist[r->tail].visit; 
q->sequence=r->tail; 
q->valuenum=(* nb).fealist[r->tail].valuenum; 
q->n=0; 
clear(q->visit,q->valuenum); 
p->next=q; 
p=q; 
r->hlink=r; 

p->next=NULL; 
return(head); 


错误提示为: 
D:\My Documents\3\Enum.C(38) : error C2039: 'Lrange' : is not a member of 'LNode' 
d:\my documents\3\linklist.h(2) : see declaration of 'LNode' 
D:\My Documents\3\Enum.C(38) : error C2039: 'range' : is not a member of 'FeaNode' 
d:\my documents\3\bayesnetwork.h(14) : see declaration of 'FeaNode' 
请教大家,到底是哪里出现了问题,谢谢了!

5 个解决方案

#1


union range 

char * c_range[MAXNumber]; 
int i_range[MAXNumber]; 
double d_range[MAXNumber]; 
}; 

改成

union 

char * c_range[MAXNumber]; 
int i_range[MAXNumber]; 
double d_range[MAXNumber]; 
} range ;

#2


没有给联合体命名。

不能用类型名去访问成员

#3


union Lrange  //这里 Lrange 是 union的名字了

char ** c_range; 
int * i_range; 
double * d_range; 
}; 
==》
union 

char ** c_range; 
int * i_range; 
double * d_range; 
}Lrange ;   //这里 Lrange 是 union类型的一个变量

union range  类似处理

#4


union range
{
char * c_range[MAXNumber];
int i_range[MAXNumber];
double d_range[MAXNumber];
}range;

union Lrange
{
char ** c_range;
int * i_range;
double * d_range;
}Lrange;
需要定义共同体的变量,另宏定义里有和stdio.h重复定义的宏

#5


我明白了,谢谢大家!

#1


union range 

char * c_range[MAXNumber]; 
int i_range[MAXNumber]; 
double d_range[MAXNumber]; 
}; 

改成

union 

char * c_range[MAXNumber]; 
int i_range[MAXNumber]; 
double d_range[MAXNumber]; 
} range ;

#2


没有给联合体命名。

不能用类型名去访问成员

#3


union Lrange  //这里 Lrange 是 union的名字了

char ** c_range; 
int * i_range; 
double * d_range; 
}; 
==》
union 

char ** c_range; 
int * i_range; 
double * d_range; 
}Lrange ;   //这里 Lrange 是 union类型的一个变量

union range  类似处理

#4


union range
{
char * c_range[MAXNumber];
int i_range[MAXNumber];
double d_range[MAXNumber];
}range;

union Lrange
{
char ** c_range;
int * i_range;
double * d_range;
}Lrange;
需要定义共同体的变量,另宏定义里有和stdio.h重复定义的宏

#5


我明白了,谢谢大家!