Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Oppenheimer en 31 Octubre 2013, 23:26 pm



Título: Problema Pilas y colas
Publicado por: Oppenheimer en 31 Octubre 2013, 23:26 pm
Hola, estoy haciendo un programa que necesita implementar pilas y colas para comparar 2 palabras palíndromas. Tengo un problema a la hora de compilar y despues de horas rompiendome la cabeza pido ayuda xd.

El problema me da a mi que esta en las cabeceras de los .h. Pero no lo consigo ver, os dejo el código a ver si alguien identifica el problema. Gracias de antemano =)!!

Código:
//pila.h
#ifndef __PILA_H__
#define __PILA_H__
#include "Nodo.h"
#include <iostream>
#include <string>


class Pila
{
  private:
          Nodo *primero;
          unsigned int numElemntos;
          void borrarCima();
 
  public:
         Pila();
         ~Pila();
         void apilar(char);
         bool desapilar(char &);
         unsigned int getElemntos();
         bool vaciaP();
};
#endif

Código:
 //Cola.h
#ifndef __COLA_H__
#define __COLA_H__
#include "Nodo.h"
#include <iostream>
#include <string>


class Cola
{
  private:
          Nodo *primero;
          Nodo  *ultimo;
          unsigned int numElemntos;
          void borrarCabeza();
 
  public:
         Cola();
         ~Cola();
         void encolar(char);
         bool desencolar(char &);
         bool vaciaC();
         unsigned int getElemntos();
};
#endif
Código:
//Nodo.h
#ifndef __NODO_H__
#define __NODO_H__
#include "Pila.h"
#include "Cola.h"
#include <iostream>
#include <string>

class Nodo
{
   friend class Pila;
   friend class Cola;
   private:
         
           Nodo *siguiente;
           char caracter; 
   
   public:
          Nodo(char);
          char getElemento();
          void setElemento(char);   
};
#endif
Código:
//Pila.cpp
#include "Nodo.h"
#include "Pila.h"
#include <iostream>
#include <string>

using namespace std;

Pila::Pila()
{
   primero = NULL;
   numElemento = 0;
};
Pila::~Pila()
{
    while(!vaciaP()) //{borrarcima();}
    {
      Nodo *p = primero;
      primero = primero->siguiente;
      delete (p);       
   
    }
};
             
bool Pila:: VaciaP()
{
     return primero; //numElementos==0 ->compara para tener un bool
};
             

void Pila::apilar(char c)
{
     Nodo *p = new Nodo(c);
     p->siguiente = primero;
     primero = p;
     numElementos++;
     
};
void Pila::borrarCima()
{
   
     Nodo *p = primero;
     primero = primero->siguiente;
     delete p;
     numElementos--;
}
bool Pila::desapilar (char &c)
{
     Nodo *aux;
     
     if(VaciaP())
     {
         cout << "La pila esta vacia \n";
         return false;           
     }
     else
     {
         aux = primero;
         primero = primero->siguiente;
         delete(aux);
         numElementos--;
         return true;
     }
};

char Pila::getElementos()
{
  return numElementos;
};

Código:
//Cola.cpp
#include "Nodo.h"
#include "Cola.h"
#include <iostream>
#include <string>

using namespace std;

Cola::Cola()
{
        Nodo  *primero = NULL;
        Nodo  *ultimo = NULL;
        unsigned int numElemntos = 0;     
};

Cola::~Cola()
{
     while(!vaciaC()) //{borrarCabeza();}
    {
      Nodo *p = primero;
      primero = primero->siguiente;
      delete (p);       
    }
};
void Cola::encolar(char c)
{   
     Nodo *p = new Cola(c);
     if (vaciaC())
     {
        primero = *p;
        ultimo = *p;
        numElementos++;         
     }
     else
     {
          p->siguiente = ultimo;
          ultimo = p;
          numElementos++
     }
 
};
bool Cola::desencolar (char &c)
{
     Nodo *aux;
     
     if(VaciaC())
     {
         cout << "La cola esta vacia \n";
         return false;
                   
     } else if (numElementos==1)
     {
       delete (primero);
       primero=null;
       ultimo=null;
       numElementos --;
       return true;
     }
     else
     {
         aux = primero;
         primero = primero->siguiente;
         delete(aux);
         numElementos--;
         return true;
     }
};
void Pila::borrarCabeza()
{
   
     Nodo *p = primero;
     primero = primero->siguiente;
     if(primero == NULL)
     {
      final = NULL;         
     }
     delete (p);
     numElementos--;
};

char Cola::getElementos()
{
  return numElementos;
};

Código:
//Nodo.cpp
#include "Nodo.h"
#include <iostream>
#include <string>

using namespace std;

Nodo::Nodo(char c)
{
   caracter = c; 
   siguiente = '\0';    //NULL 
};

char Nodo::getElemento()
{
  return caracter ;
};

void Nodo::setElemento(char c)
{
  caracter = c;   

};


Y los fallos que me tira el compilador son los siguientes:

1 C:\Dev-Cpp\Nodo.h:3,               from Nodo.cpp In file included from Nodo.h:3,               from Nodo.cpp
1 C:\Dev-Cpp\Nodo.cpp                  from Nodo.cpp
11 C:\Dev-Cpp\Pila.h ISO C++ forbids declaration of `Nodo' with no type
11 C:\Dev-Cpp\Pila.h expected `;' before '*' token
1 C:\Dev-Cpp\Nodo.h:4,               from Nodo.cpp In file included from Nodo.h:4,               from Nodo.cpp
1 C:\Dev-Cpp\Nodo.cpp                  from Nodo.cpp
11 C:\Dev-Cpp\Cola.h ISO C++ forbids declaration of `Nodo' with no type
11 C:\Dev-Cpp\Cola.h expected `;' before '*' token
12 C:\Dev-Cpp\Cola.h ISO C++ forbids declaration of `Nodo' with no type
12 C:\Dev-Cpp\Cola.h expected `;' before '*' token
C:\Dev-Cpp\Makefile.win [Build Error]  [Nodo.o] Error 1