CitarEste es parte del código que he desarrollado. No he cargado las otras clases, pero en esta parte me está generando error. Vehiculos es la superclase, al programa se le ingresan varios tipos de vehículos. Luego, cuando se ejecuta el método sacar -(eliminarElementoPorDato) en Lista.cpp - saca bien todos los vehículos pero el primero no lo sacaGracias por la ayuda.
NOTA: ALGUNOS CÓDIGOS SE DESCONFIGURABAN AL USAR code=cpp por eso me tocó quitarlo de algunos de estos archivos cargados.
Acermax, no te entendí lo de leer los apuntes para saber el funcionamiento de la pila. ¿Dónde encuentro los apuntes?
Nodo.h
Código (cpp) [Seleccionar]
#ifndef NODO_H
#define NODO_H
#include "Vehiculos.h"
class Nodo
{
private:
Nodo *siguiente;
Vehiculos *dato;
public:
Nodo(Vehiculos*,Nodo* =0);
~Nodo();
Vehiculos * verDato();
Nodo * verSiguiente();
void modificarSiguiente(Nodo *);
};
#endif
Nodo.cpp
Código (cpp) [Seleccionar]
#include "Nodo.h"
Nodo::Nodo(Vehiculos* dato,Nodo* siguiente)
{
this->siguiente=siguiente;
this->dato=dato;
}
Nodo::~Nodo()
{
if(siguiente!=0)
delete siguiente;
if(dato!=0)
delete dato;
}
Vehiculos *Nodo::verDato()
{
return dato;
}
Nodo * Nodo::verSiguiente()
{
return siguiente;
}
void Nodo::modificarSiguiente(Nodo * siguiente)
{
this->siguiente = siguiente;
}
Lista.h
Código [Seleccionar]
#ifndef __CLASSLista
#define __CLASSLista
#include "Nodo.h"
#include <string.h>
using namespace std;
class Lista
{
protected:
Nodo* cabeza;
int tama;
public:
Lista();
bool existeElemento(string elemento);
virtual void agregarNodo();
virtual void agregarNodo(Nodo*);
void imprimirLista();
int numeroNodos();
void eliminarElementoPorPosicion(int posicion);
void eliminarElementoPorDato(const string&);
bool listaVacia();
Lista& operator<<(Nodo*);
Nodo * operator[](int);
};
#endif
Lista.cpp
Código (cpp) [Seleccionar]
#include "Lista.h"
#include "Carro.h"
#include "Furgoneta.h"
#include "Camion.h"
#include "Moto.h"
using namespace std;
Lista::Lista()
{
//aqui es cabeza = 0 y tama = o
cabeza = 0;
tama = 0;
}
bool Lista::existeElemento(string dato)
{
Nodo *actual = cabeza;
while(actual!=0)
if(actual->verDato()->verPlaca()==dato)
return true;
else
actual = actual->verSiguiente();
return false;
}
int tipos()
{
int tipo;
cout<<"Seleccione el tipo de vehiculo"<<endl;
cout<<"1 Carro"<<endl;
cout<<"2 Moto"<<endl;
cout<<"3 Furgoneta"<<endl;
cout<<"4 Camion"<<endl;
cin>>tipo;
return tipo;
}
void Lista::agregarNodo()
{
string placa,color,marca,modelo;
cout<<"Ingresar placa del auto"<<endl;
cin>> placa;
cout<<"Ingresar color del auto"<<endl;
cin>> color;
cout<<"Ingresar marca del auto"<<endl;
cin>> marca;
cout<<"Ingresar modelo del auto"<<endl;
cin>> modelo;
Vehiculos * vehiculo;
switch(tipos())
{
case 1: vehiculo = new Carro(placa,color,marca,modelo);break;
case 2: vehiculo = new Moto(placa,color,marca,modelo);break;
case 3: vehiculo = new Furgoneta(placa,color,marca,modelo);break;
case 4: vehiculo = new Camion(placa,color,marca,modelo);break;
default:
cout<<"Tipo de vehiculo desconocido.\nVehiculo no agregado!"<<endl;
return;
}
agregarNodo(new Nodo(vehiculo));
}
Lista& Lista::operator<<(Nodo* dato)
{
if(cabeza==0) cabeza = dato;
Nodo *actual = cabeza;
for(int i=1; i<tama;i++)
actual = actual->verSiguiente();
actual->modificarSiguiente(dato);
tama++;
return *(this);
}
Nodo * Lista::operator[](int posicion)
{
Nodo *actual = cabeza;
for(int i=0; i>posicion-1; i++)
actual=actual->verSiguiente();
actual->modificarSiguiente(actual->verSiguiente()->verSiguiente());
return actual;
}
void Lista::agregarNodo(Nodo*dato)
{
if(cabeza==0) cabeza = dato;
Nodo *actual = cabeza;
for(int i=1; i<tama;i++)
actual = actual->verSiguiente();
actual->modificarSiguiente(dato);
tama++;
}
void Lista::imprimirLista()
{
Nodo *actual = cabeza;
Vehiculos * vehiculoActual;
while(actual!=0)
{
vehiculoActual = actual->verDato();
cout<<vehiculoActual->verPlaca()<<'\t';
cout<<vehiculoActual->verTipo()<<'\t';
cout<<vehiculoActual->verColor()<<'\t';
cout<<vehiculoActual->verMarca()<<'\t';
cout<<vehiculoActual->verModelo()<<'\t';
cout<<endl;
actual = actual->verSiguiente();
}
}
int Lista::numeroNodos()
{
return tama; //solo dice return tama;
}
void Lista::eliminarElementoPorDato(const string& dato)
{
Nodo *anterior=0,*actual = cabeza;
while(actual!=0)
{
if( (actual->verDato()->verPlaca()==dato) && (anterior!=0) )
{
anterior->modificarSiguiente(actual->verSiguiente());
tama--;
return;
}
anterior = actual;
actual=actual->verSiguiente();
}
}
void Lista::eliminarElementoPorPosicion(int posicion)
{
Nodo *actual = cabeza;
for(int i=0; i>posicion-1; i++)
actual=actual->verSiguiente();
actual->modificarSiguiente(actual->verSiguiente()->verSiguiente());
tama--;
}
bool Lista::listaVacia()
{
if(tama==0)
return true;
return false;
}
Pila.h
Código [Seleccionar]
#ifndef __CLASSPila
#define __CLASSPila
#include "Lista.h"
#include "Nodo.h"
#include "Vehiculos.h"
using namespace std;
class Pila:public Lista
{
public:
Pila();
bool pilaVacia();
Vehiculos* obtenerTope();
void desapilar(int);
void imprimirPila();
};
#endif
Pila.cpp
Código (cpp) [Seleccionar]
#include "Pila.h"
using namespace std;
Pila::Pila():Lista()
{
}
bool Pila::pilaVacia()
{
return listaVacia();
}
Vehiculos* Pila::obtenerTope()
{
Nodo * actual = cabeza;
while(actual->verSiguiente()!=0)
actual=actual->verSiguiente();
return actual->verDato();
}
void Pila::imprimirPila()
{
imprimirLista();
}
void Pila::desapilar(int posicion)
{
eliminarElementoPorPosicion(posicion);
}