0

Hola necesito su ayuda porfavor, estoy intentando compilar este programa en Linux pero me sale un pequeño error al momento de compilar en la consola de comandos, este programa lo estoy compilando como:

gcc Princpial.c

y al momento de dar enter me sale el siguiente error...

Les dejo abajo cómo implemente mi librería...

Principal.c: In function ‘Principal’:

Principal.c:23:2: error: unknown type name ‘tipoDato’

tipoDato r1,r2;

^~~~~~~~

Principal.c

#include <stdio.h>
#include "Pila.h"

void Principal();
void menu();


void menu(){
    int opcion;

    printf("-----------------Bienvendido Querido usuario---------------\n");
    printf("1.-Ingresar palabra");
    printf("2.-Salir");
    printf("Opcion: ");
    scanf("%d",&opcion);
}

void Principal(){
    PILA A,B,C;
    char cad;
    int flag = 1;

    tipoDato r1,r2;

    crearPila(&A);
    crearPila(&B);
    crearPila(&C);

    while((cad=getchar())!='\n')
    {
        insertarPila(&A,cad);
        insertarPila(&B,cad);

    }
    while(!pilaVacia(B))
    {
        insertarPila(&C,quitarPila(&B));
    }
    while(!pilaVacia(B)){
        r1 = quitarPila(&B);
        insertarPila(&C,r1);    
    }

    while(!pilaVacia(A)){
        r1 = quitarPila(&A);
        r2 = quitarPila(&C);

        if(r1!=r2)
        {
            flag=0;
            break;
        }
    }

    if(flag == 1)
    {
        printf("La palabra escrita es un palindromo");     
    }
    else
    {
        printf("La palabra escrita no es palindromo");
    }
}

int main(){
    menu();



    return 0;
}

Pila.c funciones

#include "Pila.h"
typedef int tipoDato;


void crearPila(PILA *p)
{
    p->CIMA=-1; 
}

int pilaVacia(PILA p){
    return (p.CIMA==-1 ? 1 : 0);
}

int pilaLlena(PILA p)
{
    return (p.CIMA==TAM-1 ? 1 : 0);
}

void insertarPila(PILA *p,int x)
{
    if (pilaLlena(*p))
    {
        printf("Error, pila llena!!!");
        break;
    }
    p->CIMA = p->CIMA+1;
    p->listaPila[p->CIMA]=x;
}

tipoDato quitarpila(PILA *p)
{
    int aux;
    if(pilaVacia(*p))
    {
        printf("La pila está vacia");
    }
    aux = p->listaPila[p->CIMA];
    p->CIMA = p->CIMA-1;


    return aux;
}

tipoDato mostrarCima(PILA p)
{

    if(pilaVacia(p))
    {
        printf("La piña esta vacia, no hay nada que mostrar");
    }

    return (p.listaPila[p.CIMA]);
}

void eliminarPila(Pila *p)
{
    p->CIMA=-1;
}

Pila.h prototipos

#include <stdio.h>
#include <stdlib.h>
#define TAM 100



typedef struct Pila{
    int listaPila[TAM];
    int CIMA;
}PILA;

void crearPila(PILA *p);
void insertarPila(PILA *p,int x);
int quitarPila(PILA *p);
int mostrarCima(PILA p);
int pilaVacia(PILA p);
int pilaLlena(PILA p);
void eliminarPila(PILA *p);

la verdad nose por qué me sale ese error, si es tipoDato ya está definido... por su respuesta muchas gracias...

Ruslan López
  • 10,060
  • 11
  • 35
  • 68
VALNET VLN
  • 56
  • 7
  • 1
    Quita `typedef int tipoDato;` de `Pila.c` y ponlo en `Pila.h`. – Trauma Feb 03 '19 at 18:56
  • /tmp/ccAojmqo.o: En la función `Principal': Principal.c:(.text+0xb4): referencia a `crearPila' sin definir Principal.c:(.text+0xc3): referencia a `crearPila' sin definir Principal.c:(.text+0xd2): referencia a `crearPila' sin definir Principal.c:(.text+0xec): referencia a `insertarPila' sin definir Principal.c:(.text+0x104): referencia a `insertarPila' sin definir Principal.c:(.text+0x129): referencia a `quitarPila' sin definir me sale todo eso no puse todo pero pero me sale ese error a todas las funciones que defini – VALNET VLN Feb 03 '19 at 19:48
  • 1
    [Simbolo externo sin resolver ¿Qué he hecho mal?](https://es.stackoverflow.com/q/65557/19610) – Trauma Feb 03 '19 at 20:18

1 Answers1

1

estimado, algunos comentarios con respecto a tu código:

  1. en Principal.c

    • Haces referencia a tipoDato r1,r2; y este tipo de datos no esta implementado, y si no lo encuentra en algún include, te dará error. Mas adelante veo que esta implementado de Pila.c, lo deberías incluir en Pila.h

    • Tu flujo de proceso pareciera que termina abrutamente, ya que por lo que veo, la función Principal() nunca es llamada.

  2. en Pila.c

    • En la funcion insertarPila estas haciendo un break en un if, eso no es valido, debes de reimplementar este buqle, te suguiero un else.
    • Estas implementando quitarpila(PILA *p), y esta no esta prototipada en Pila.h
    • Estas implementando eliminarPila(Pila *p), y el tipo de datos Pila no exista.

Espero te ayuden estos comentarios.

  • Lo que me dices en el primer punto se supone que lo busca en #include "Pila.h" pero nose porque me da más errores si lo de typedef int tipo Dato lo pongo en Pila.c en donde están los demás prototipos, en el tercer punto no llamo a la funcion principal porque no es necsario aún, solo llamo a la función del menu para probar si compila, ya si compila entonces ya llamo a la función pricipal. – VALNET VLN Feb 07 '19 at 05:03
  • En la parte dos en segundo y tercer punto ya puse el prototipo de mi función... – VALNET VLN Feb 07 '19 at 05:04
  • "Un header file contiene, normalmente, una declaración directa de clases, subrutinas, variables, u otros identificadores." fuente WIKIPEDIA – RodrigoBurgosMella Feb 07 '19 at 15:25