错误:成员引用基类型'*****'(又名'*****')不是结构或联合

时间:2016-01-08 16:18:44

标签: c struct linked-list

当我尝试在我通过引用传递的函数中访问我的结构时,编译器显示以下错误:

error: member reference base type 'Pila' (aka 'struct tipoCelda *') is not a structure or union
        **p = p->sig;**

这是头文件中结构的原型:

typedef int tipoElemento;

typedef struct tipoCelda { 
    tipoElemento elemento; 
    struct tipoCelda * sig; 
    } tipoCelda;

typedef tipoCelda * Pila;

这是我收到错误的函数:

tipoElemento pilaSuprime (Pila *p){

    tipoElemento borrado;

    if (pilaVacia(p) == 1)
        printf ("\n\nNO SE PUEDE BORRAR.La pila esta vacia\n");
    else{
        borrado = p->elemento;

        p->elemento = 0;
        p = p->sig;
    }

    return borrado;
}

由于这三行,我收到了消息:

borrado = p->elemento;

            p->elemento = 0;
            p = p->sig;

我在main中声明堆栈然后调用函数:

Pila variablePila;

//////OTHER ACTIONS//////

pilaSuprime(variablePila)

我正在尝试删除链接列表的节点,该节点的行为类似于堆栈,但我无法编译它。

1 个答案:

答案 0 :(得分:0)

我没有以正确的方式插入节点。 现在使用这种方法可以了!

int pilaInserta (Pila *p,tipoElemento elemento){

Pila nuevo;

nuevo = (Pila) malloc (sizeof(Pila));
if (nuevo == NULL){
    printf ("Error al crear el nuevo nodo de la pila\n");
    return 0;
}

nuevo->elemento = elemento;
if (*p == NULL){ //Si estaba vacia y es el primero
    *p = nuevo;
    nuevo->sig = NULL;
}
else{
    nuevo->sig = *p; //Apuntamos al que estaba primero
    *p = nuevo;
}

return 0;

}

对于删除节点就像一个用户写道:

tipoElemento pilaSuprime (Pila *p){

    tipoElemento borrado;

    if (pilaVacia(p) == 1)
        printf ("\n\nNO SE PUEDE BORRAR.La pila esta vacia\n");
    else{
        borrado = (*p)->elemento;

        (*p)->elemento = 0;
        p = (*p)->sig;

        printf ("\n\nEl elemento borrado es: %d\n",borrado);
    }

    return borrado;
}