【问题标题】:Error: member reference base type '*****' (aka '*****') is not a structure or union错误:成员引用基类型“*****”(又名“*****”)不是结构或联合
【发布时间】:2016-01-08 16:18:43
【问题描述】:

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

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;
}

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

borrado = p->elemento;

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

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

Pila variablePila;

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

pilaSuprime(variablePila)

我正在尝试删除链表的一个节点,该节点的作用类似于堆栈,但我无法编译它。

【问题讨论】:

  • 您不应该将&variablePila 从您的主函数传递给该函数吗?您的函数采用Pila*,而不是Pila

标签: c struct linked-list


【解决方案1】:

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

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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多