功能中使用的Undeclare结构成员?

时间:2013-12-06 05:38:19

标签: c++ structure member

由于假定的“未声明”结构成员,我的函数定义将无法编译。它说“错误:'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;
}
}

3 个答案:

答案 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的“成员”,这不是一个成员函数。