У меня есть этот код прямо здесь. Я пытаюсь реализовать, но я получил и ошибка, и я не представляю, как я могу избавиться от этого. Это стек. Я должен вызвать функцию, чтобы вставить значения в нее, но компилятор продолжает показывать эту ошибку и не позволяет мне делать что-либо еще.
Passing 'pilha' to parameter of incompatible type 'int'
pilha * cria_pilha(){
pilha *pi;
pi = malloc(sizeof(pilha));
if (!pi) {
pi -> topo = 0;
}
return pi;
}
и я пытаюсь вызвать его здесь.
int main (int argc, const char * argv[]){
//Cria vetor de struct preenchido com a quantidade MAX_ELEMENTOS
pilha * pi = cria_pilha();
pilha p[MAX_ELEMENTOS] = {1, 2, 3, 4, 5,
6, 7, 8, 9, 10};
//Call the function Stack, then pass by argument p[]
//stacking the values MAX_ELEMENTS times.
for (int i = 0; i < MAX_ELEMENTOS; i++) {
//The error happens here. I already identified the cause but
//I've got no idea how to solve it. Any help please?
empilha(pi, p[i]); -- Passing 'pilha' to parameter of incompatible type 'int'
}
for (int i = 0; i < MAX_ELEMENTOS; i++) {
desempilha(pi);
}
}
Я вызываю функцию int empilha(pilha *pi, int p);
, которая по моим Понимание имеет pilha * pi, который не совместим с типом int. Как я могу решить эту проблему?
Вот весь мой код.
#include <stdio.h>
#include <stdlib.h>
#define MAX_ELEMENTOS 10
typedef struct {
int elementos[MAX_ELEMENTOS];
int topo;
} pilha;
pilha * cria_pilha(){
pilha *pi;
pi = malloc(sizeof(pilha));
if (!pi) {
pi -> topo = 0;
}
return pi;
}
int empilha(pilha *pi, int p);
int desempilha(pilha *pi);
int tamanho (pilha *pi);
void destroi(pilha *pi);
int main (int argc, const char * argv[]){
//Cria vetor de struct preenchido com a quantidade MAX_ELEMENTOS
pilha * pi = cria_pilha();
pilha p[MAX_ELEMENTOS] = {1, 2, 3, 4, 5,
6, 7, 8, 9, 10};
//Chama função empilhar, passa por argumento o velho p[]
//para função empilha MAX_ELEMENTOS vezes.
for (int i = 0; i < MAX_ELEMENTOS; i++) {
empilha(pi, p[i]);
}
for (int i = 0; i < MAX_ELEMENTOS; i++) {
desempilha(pi);
}
}
int empilha(pilha *pi, int p){
if (pi == NULL || pi -> elementos == ((int*)MAX_ELEMENTOS)) {
printf("Erro, pilha cheia.\n");
return 0;
}
pi -> elementos[pi->topo] = p;
pi -> topo = pi -> topo + 1;
return 1;
}
int desempilha(pilha *pi){
if (pi == NULL || pi -> elementos[0] == 0) {
return 0;
}
pi -> topo = pi -> topo -1;
return pi -> elementos[pi->topo];
}
int tamanho(pilha *pi){
return pi -> topo;
}
void destroi(pilha *pi){
free(pi);
}