由于假定的“未声明”结构成员,我的函数定义将无法编译。它说“错误:'gen'notclared”。但是我宣布了它,甚至在之后将其初始化(为了简单起见,我把这部分留了下来)。你能明白为什么这不会编译吗?
我的结构:
typedef struct Parent {
int gen; //I DECLARE IT RIGHT HERE!!!
char *name;
struct Parent * next;
child * child;
} parent;
和我的职能:
void findP(parent* x){ //function findP
headP = p;
tempC = headP->child;
int check = 0;
while(headP != NULL){
while(tempC != NULL){
if (x->name == tempC->name){
x->gen = gen--; //HERES WHERE I USE IT
findP(headP); //recursion here
check++;
break;
}
if(check > 0) break;
tempC = tempC->next;
}
if(check > 0) break;
headP = headP->next;
}
}
答案 0 :(得分:3)
x->gen = gen--;
<{>} gen
findP()
当然是未宣布的。
我认为这应该是x->gen--;
答案 1 :(得分:2)
x->gen = gen--;
x->gen
存在。 gen
但是?右边的东西是什么?你的意思是以下吗?
x->gen--;
答案 2 :(得分:0)
您已声明gen
,但您已将其声明为struct Parent的成员。顺便说一句,您不需要结构声明前面的typedef
。
这个问题不明显的原因是你陷入了一个不使你的struct / class成员变量不同的常见陷阱。许多开发团队采用最佳实践来区分成员变量名称与前导m_
,m
或尾随_
。 m_
似乎是最主要的做法。
struct Parent {
int m_gen; //I DECLARE IT RIGHT HERE!!!
char * m_name;
Parent * m_next;
child * m_child;
};
typedef Parent parent; // if you're hell-bent on having both versions.
现在问题应该变得非常明显:
while(headP != NULL){
while(tempC != NULL){
if (x->m_name == tempC->m_name){
x->m_gen = gen--; //HERES WHERE I USE IT
gen
不是某个东西的成员,它是一个局部变量。如果添加m_前缀
x->m_gen = m_gen--; //HERES WHERE I USE IT
然后再次非常清楚,你没有说右边的m_gen
的“成员”,这不是一个成员函数。