当我尝试在我通过引用传递的函数中访问我的结构时,编译器显示以下错误:
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)
我正在尝试删除链接列表的节点,该节点的行为类似于堆栈,但我无法编译它。
答案 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;
}