El de vectores ya esta, si funciono y me confundi en esta parte por eso no sabia donde declarar esa varible Gracias.
std::vector< Camion* > Camiones;
Camiones.push_back( new_camion );
Camion* camion = Camiones[ 0 ]; //1.esta parte
std::vector< Camion* > camiones;
// ...
if ( camiones.size( ) < Maximo )
{
// ...
camiones.push_back( new_camion ); //2.estaparte
}
else
{
// ...
}
//Codigo arreglo de punteros
//Camiones.h
#ifndef CAMION_H
#define CAMION_H
#include <iostream>
using namespace std;
// Variables globales si la hay
class Camion
{
//Variables Privadas
private:
int idCamion;
int cilindrajeCamion;
int nPuertasCamion;
int anioCamion;
double precioCamion;
string marcaCamion, modeloCamion, colorCamion;
public:
//Constructores.
Camion(int =0, int=0, int=0, int=0);
Camion(double =0.0);
Camion(string = "", string = "", string = "");
//Funciones o metodos publicos
void setIdCamion(int); //Devuelve el Id del Camion.
void setCilindrajeCamion(int); //Devuelve el cilindrage del camion
void setNPuertasCamion(int); //Devuelve el numero de puertas del camion
void setanioCamion(int); //Devuelve el año del camion
void setPrecioCamion(double); //Devuelve el precio del camion
void setMarcaCamion(string); //Devuelve la marca del camion
void setModeloCamion(string); //Devuelve el modelo del camion
void setColorCamion(string); //Devuelve el color del camion
int getIdCamion() const; //Obtiene Id del Camion.
int getCilindrajeCamion() const; //Obtiene el cilindrage del camion
int getnPuertasCamion() const; //Obtiene numero de puertas del camion
int getanioCamion() const; //Obtiene el año del camion
double getPrecioCamion() const; //Obtiene el precio del camion
string getMarcaCamion() const; //Obtiene la marca del camion
string getModeloCamion() const; //Obtiene el modelo del camion
string getColorCamion() const; //Obtiene el color del camion
//Otros Metodos
void ingresarCamion();
void flistaDeCamiones();
void imprimir();
int buscarCamion(int);
void modificarCamion();
void eliminarCamion();
private:
Camion**listaDeCamiones;
int cantidadDeCamiones;
};
#endif
//Camion.cpp
#include "Camion.h"
#include <iostream>
#include <iomanip>
#include <string>
//Constructores valores enteros
Camion::Camion (int idCam, int cilindrajeCam, int puertasCam, int anioCam)
{
idCamion = idCam;
cilindrajeCamion = cilindrajeCam;
nPuertasCamion = puertasCam;
anioCamion = anioCam;
cantidadDeCamiones =0;
}
//Constructores valores double
Camion::Camion(double precioCam)
{
precioCamion = precioCam;
}
//Constructores valores string
Camion::Camion(string marcaCam, string modeloCam,string colorCam)
{
marcaCamion = marcaCam;
modeloCamion = modeloCam;
colorCamion = colorCam;
}
//Funciones set
void Camion::setIdCamion(int idCam)
{
idCamion = idCam;
}
void Camion::setCilindrajeCamion(int cilindrajeCam)
{
cilindrajeCamion = cilindrajeCam;
}
void Camion::setNPuertasCamion(int puertasCam)
{
nPuertasCamion = puertasCam;
}
void Camion::setanioCamion(int anioCam)
{
anioCamion = anioCam;
}
void Camion::setPrecioCamion(double precioCam)
{
precioCamion = precioCam;
}
void Camion::setMarcaCamion(string marcaCam)
{
marcaCamion = marcaCam;
}
void Camion::setModeloCamion(string modeloCam)
{
modeloCamion = modeloCam;
}
void Camion::setColorCamion(string colorCam)
{
colorCamion = colorCam;
}
//Funciones get
int Camion::getIdCamion() const
{
return idCamion;
}
int Camion::getCilindrajeCamion() const
{
return cilindrajeCamion;
}
int Camion::getnPuertasCamion() const
{
return nPuertasCamion;
}
int Camion::getanioCamion()const
{
return anioCamion;
}
double Camion::getPrecioCamion() const
{
return precioCamion;
}
string Camion::getMarcaCamion() const
{
return marcaCamion;
}
string Camion::getModeloCamion() const
{
return modeloCamion;
}
string Camion::getColorCamion() const
{
return colorCamion;
}
//ListaCamiones.cpp
#ifndef LISTADECAMIONES_H
#define LISTADECAMIONES_H
#include "Camion.h"
#define MAXIMO 100
class listaDeCamiones
{
//Variables para esta clase
Camion Camiones[MAXIMO];
int nCamiones;
void listaDeCamiones::ingresarCamion()
{
int idCam, cilindrajeCam, nPuertasCam, anioCam;
string marcaCam, modeloCam, colorCam;
double precioCam;
nCamiones =0; //Inicializo variable nCamiones.
//If No sobre pase la cantidad de camiones
if (nCamiones < MAXIMO)
{
system("cls");
cout << "Ingrese los datos del camion\n";
cout << "Ingrese el ID del camion: ";
cin >> idCam;
cout << "Ingrese el cilindraje del camion: ";
cin >> cilindrajeCam;
cout << "Ingrese el numero de puertas: ";
cin >> nPuertasCam;
cout << "Ingrese el año del Camion: ";
cin >> anioCam;
cout << "Ingrese el presio del camion: ";
cin >> precioCam;
cout << "Ingrese la Marca del Camion: ";
cin >> marcaCam;
cout << "Ingrese el Modelo del camion: ";
cin >> modeloCam;
cout << "Ingrese el color del camion: ";
cin >> colorCam;
//Instancia de camion y separado por cada constructo
Camion *nuevoCamion1 = new Camion(idCam, cilindrajeCam, nPuertasCam, anioCam);
Camion *nuevoCamion2 = new Camion(precioCam);
Camion *nuevoCamion3 = new Camion(marcaCam, modeloCam, colorCam);
//Añade al arreglo y lo actualiza
Camiones[nCamiones++] = new_nuevoCamion;
cout << endl <<"Los datos del camion fueron ingresados correctamente\n";
}
else
{
system("cls");
cout << "Ya no hay espacio disponible para mas camiones\n";
}
}
};
#endif
//Esta parte ya la había probado y estas en lo correcto no tira error de esa forma.
Camion *nuevoCamion1 = new Camion(idCam, cilindrajeCam, nPuertasCam, anioCam);
Camion *nuevoCamion2 = new Camion(precioCam);
Camion *nuevoCamion3 = new Camion(marcaCam, modeloCam, colorCam);
//Ahora el error es acá. Entonces eso quiere decir que ahora tendré que crear un arreglo y que lo actualice de acuerdo a sus argumentos.
Camiones[nCamiones++] = new_nuevoCamion1;
Camiones[nCamiones++] = new_nuevoCamion2;
Camiones[nCamiones++] = new_nuevoCamion3;
//En esta parte tambien pense lo mismo y era lo que preguntaba mas arriba que si //era asi que es lo que tu mecomentas.
Camion nuevoCamion* = new Camion(idCam, cilindrajeCam, nPuertasCam, anioCam);
En cuanto a la liberación de memoria tengo estas funciones y hay una donde lo hace lo tengo en mente pero no puedo implementarlas si no puedo hacer la primera función que es la de ingresarlos porque estas irían en listaCamiones.Y tengo claro que cambiaran por supuesto y que tengo que arreglarlos también.
//Muestra los datos del camion
void Camion::flistaDeCamiones()
{
if (cantidadDeCamiones==0)
{
system("cls");
cout<<"No se a registrado ninguna Camion todavía"<<endl;
}
else
{
cout<<"..:::Lista de Camiones:::.."<<endl<<endl;
cout << setw(10)<<"Id Camion"<<setw(15)<<"Modelo"<<setw(15)<<"marca"<<endl;
cout<<"================================================="<<endl;
//Imprimmir todos los camiones almacenadas en el arreglo
for (int i=0; i<cantidadDeCamiones; i++)
{
listaDeCamiones[i]->imprimir(); //PROBLEMA Y NO LO IDENTIFICO
}
cout<<endl<<"*******Fin de la lista **********"<<endl<<endl;
}
}
//Busca ese camion
int Camion::buscarCamion(int codigo)
{
for (int i=0; i < cantidadDeCamiones; i++)
{
if(listaDeCamiones[i]->getIdCamion() == codigo)
{
return i;
}
}
return -1;
}
//Modifica ese Camion.
void Camion::modificarCamion()
{
if (cantidadDeCamiones == 0)
{
system("cls");
cout << "No se ha registrado ningun camion tadavia\n";
}
else
{
cout << "Modificar Camion\n\n";
int codigoCamion;
cout << "Ingrese el codigo del camion: ";
cin >> codigoCamion;
int ubicacion = buscarCamion(codigoCamion);
if (ubicacion == -1)
{
cout << "Lo sentimos ese codigo del camion no existe\n";
}
else
{
cout << "El codigo se encontro\n\n";
cout << setw(10)<<"Id"<<setw(15)<<"Modelo"<<setw(15)<<"marca"<<endl;
cout<<"================================================="<<endl;
listaDeCamiones[ubicacion]->imprimir();
cout << "\n\n";
cout << "Ingrese los nuevos datos del Camion\n\n";
cout << "Marca";
cin >> marcaCamion;
cout << "Modelo del camion: ";
cin >> modeloCamion;
cout << "Año del Camion: ";
cin >> anioCamion;
cout << "Cilindraje del camion: ";
cin >> cilindrajeCamion;
cout << "numero de puertas: ";
cin >> nPuertasCamion;
cout << "Color del camion: ";
cin >> colorCamion;
cout << "Presio del camion: ";
cin >> precioCamion;
listaDeCamiones[ubicacion]->setMarcaCamion(marcaCamion);
listaDeCamiones[ubicacion]->setModeloCamion(modeloCamion);
listaDeCamiones[ubicacion]->setanioCamion(anioCamion);
listaDeCamiones[ubicacion]->setCilindrajeCamion(cilindrajeCamion);
listaDeCamiones[ubicacion]->setNPuertasCamion(nPuertasCamion);
listaDeCamiones[ubicacion]->setColorCamion(colorCamion);
listaDeCamiones[ubicacion]->setPrecioCamion(precioCamion);
cout << "El camion fue modificado Exitosamente.\n";
}
}
}
void Camion::eliminarCamion()
{
if (cantidadDeCamiones == 0)
{
system("cls");
cout << "No se ha registrado ningun camion tadavia\n";
}
else
{
cout << "Eliminar Camion\n\n";
int codigoCamion;
cout << "Ingrese el codigo a eliminar: ";
cin >> codigoCamion;
int ubicacion = buscarCamion(codigoCamion);
if (ubicacion == -1)
{
cout << "Lo sentimos ese codigo del camion no existe\n";
}
else
{
cout << "El codigo se encontro\n\n";
cout << setw(10)<<"Id"<<setw(15)<<"Modelo"<<setw(15)<<"marca"<<endl;
cout<<"================================================="<<endl;
listaDeCamiones[ubicacion]->imprimir();
cout << "\n\n";
cout << "Presione enter para eliminar ese camion\n\n";
system("pause");
//Pasa a eliminar usando una copia del arreglo
Camion**temporalListaDeCamiones = new Camion*[Maximo];
int temporalCantidadDeCamiones = 0;
//Se copia el arreglo en otro arreglo exepto el que se quiere eliminar
for(int i =0; i < cantidadDeCamiones; i++)
{
if(i!=ubicacion)
{
temporalListaDeCamiones[temporalCantidadDeCamiones] = new Camion(listaDeCamiones[i]->getIdCamion(),
listaDeCamiones[i]->getCilindrajeCamion(),
listaDeCamiones[i]->getnPuertasCamion(),
listaDeCamiones[i]->getanioCamion(),
listaDeCamiones[i]->getPrecioCamion(),
listaDeCamiones[i]->getMarcaCamion(),
listaDeCamiones[i]->getModeloCamion(),
listaDeCamiones[i]->getColorCamion());
temporalCantidadDeCamiones++;
}//Fin if
}//Fin for
//Limpio la memoria usada por el arreglo principal de camiones
for(int i=0; i<cantidadDeCamiones; i++)
{
listaDeCamiones[i]->~Camion();
}
//copia el arreglo temporal al principio
cantidadDeCamiones = 0;
for(int i =0; i<temporalCantidadDeCamiones; i++)
{
listaDeCamiones[cantidadDeCamiones] = new Camion(temporalListaDeCamiones[i]->getIdCamion(),
temporalListaDeCamiones[i]->getCilindrajeCamion(),
temporalListaDeCamiones[i]->getnPuertasCamion(),
temporalListaDeCamiones[i]->getanioCamion(),
temporalListaDeCamiones[i]->getPrecioCamion(),
temporalListaDeCamiones[i]->getMarcaCamion(),
temporalListaDeCamiones[i]->getModeloCamion(),
temporalListaDeCamiones[i]->getColorCamion());
cantidadDeCamiones++;
}//Fin for
cout << "El camion fue eliminado exitosamente\n\n";
}//fin else
}
}
//Imprime los datos del Camion
void Camion::imprimir()
{
cout<<setw(10)<<idCamion<<setw(15)<<modeloCamion<<setw(15)<<marcaCamion<<endl;
}