EDIT: I'll leave the codes just below the same text.
Good evening. Please see the attached image.
It is the implementation of a function whose prototype is defined in another file named "stack.h". As it is, it works perfectly.
However, if I delete line 11 and modify line 5 to typedef struct {....} stack; I have a compilation error:
stack.c: In function 'CreatePath':
stack.c: 15: 6: error: dereferencing pointer to incomplete type 'struct stack '
p->v = malloc(tamanho * sizeof(char)); ^~
Could anyone help me to understand this error?
Thanks in advance!
--------------- stack.h -----------------
typedef struct pilha *Pilha;
Pilha criaPilha(int tamanho);
int pilhaCheia(Pilha p);
int pilhaVazia(Pilha p);
void empilha(Pilha p, char elemento);
char desempilha(Pilha p);
int topo(Pilha p);
char eleTopo(Pilha p);
----------- stack.c -----------
#include <stdio.h>
#include <stdlib.h>
#include "pilha.h"
struct pilha {
char *v;
int topo;
int tamanho;
};
typedef struct pilha pilha;
Pilha criaPilha(int tamanho) {
Pilha p = malloc(sizeof(pilha));
p->v = malloc(tamanho * sizeof(char));
p->topo = 0;
p->tamanho = tamanho;
return p;
}
int pilhaCheia(Pilha p) {
if (p->topo > p->tamanho)
return 1;
return 0;
}
int pilhaVazia(Pilha p) {
if (p->topo == 0)
return 1;
return 0;
}
void empilha(Pilha p, char elemento) {
if (!pilhaCheia(p)) {
p->topo++;
p->v[p->topo] = elemento;
}
else
printf("Pilha cheia!\n");
}
char desempilha(Pilha p) {
if (!pilhaVazia(p)) {
p->topo--;
return p->v[p->topo + 1];
}
else
return ' p->v = malloc(tamanho * sizeof(char));
^~
';
}
int topo(Pilha p) {
return p->topo;
}
char eleTopo(Pilha p) {
return p->v[p->topo];
}