Que estoy haciendo mal arreglo? (Solucionado)

Iniciado por nolasco281, 4 Febrero 2014, 01:58 AM

0 Miembros y 3 Visitantes están viendo este tema.

x64core

Intenta así:
.cpp:
Camion** listaDeCamiones;
.h:
extern Camion**listaDeCamiones;

Luego al inicio del programa o en donde se necesite inicializa listaDeCamiones con new, etc.

Sino pues publica todo el código no podria decirte que es con exactitud ya que el código es incompleto.



nolasco281

Aca esta la .h he estado trando de hacer lo que me dices como puedes ver.
Código (cpp) [Seleccionar]
#ifndef CAMION_H
#define CAMION_H
#include <iostream>
using namespace std;

extern Camion**listaDeCamiones;

// Variables globales
class Camion
{
     private:
     int idCamion;
     int cilindrajeCamion;
     int nPuertasCamion;
     int anioCamion;
     double precioCamion;
     string marcaCamion, modeloCamion, colorCamion;
     
     public:
     Camion(int =0, int=0, int=0, int=0, double = 0.0, string = "", string = "", string = "");
     
     void setIdCamion(int);
     void setCilindrajeCamion(int);
     void setNPuertasCamion(int);
     void setanioCamion(int);
     void setPrecioCamion(double);
     void setMarcaCamion(string);
     void setModeloCamion(string);
     void setColorCamion(string);
     
     int getIdCamion() const;
     int getCilindrajeCamion() const;
     int getnPuertasCamion() const;
     int getanioCamion() const;
     string getMarcaCamion() const;
     string getModeloCamion() const;
     string getColorCamion() const;
     double getPrecioCamion() const;
     
     //Otros Metodos
     void ingresarCamion();
     void listaDeCamiones();
     void imprmir();
     
};
#endif


y aca la cpp

Código (cpp) [Seleccionar]
#include "Camion.h"
#include <iostream>
#include <iomanip>
using namespace std;

    Camion**listaDeCamiones;
    const int Maximo =100;
    int cantidadDeCamiones =0;
 
Camion::Camion (int idCam, int cilindrajeCam, int puertasCam, int anioCam,
               double precioCam, string marcaCam, string modeloCam,
               string colorCam)
               {
                  idCamion = idCam;
                  cilindrajeCamion = cilindrajeCam;
                  nPuertasCamion = puertasCam;
                  anioCamion = anioCam;
                  precioCamion = precioCam;
                  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;
}

void Camion::ingresarCamion()
{
  Camion**listaDeCamiones = new Camion*[Maximo];// arreglo de 100
  if (cantidadDeCamiones < Maximo)
  {
                       
    system("cls");
    cout << "Ingrese los datos del camion\n";
    cout << "Ingrese el ID del camion: ";
    cin  >> idCamion;
   
    cout << "Ingrese la Marca del Camion: ";
    cin  >> marcaCamion;
   
    cout << "Ingrese el Modelo del camion: ";
    cin  >> modeloCamion;
   
    cout << "Ingrese el año del Camion: ";
    cin  >> anioCamion;
   
    cout << "Ingrese el cilindraje del camion: ";
    cin  >> cilindrajeCamion;
   
    cout << "Ingrese el numero de puertas: ";
    cin  >>  nPuertasCamion;
   
    cout << "Ingrese el color del camion: ";
    cin  >> colorCamion;
   
    cout << "Ingrese el presio del camion: ";
    cin  >> precioCamion;
   
    listaDeCamiones[cantidadDeCamiones] = new Camion(idCamion, cilindrajeCamion,
                                                     nPuertasCamion, anioCamion,
                                                     precioCamion, marcaCamion,
                                                     modeloCamion,colorCamion);
    cantidadDeCamiones++;
   
    cout << "Los datos del camion fueron ingresados correctamente\n\n";
  }
  else
  {
      system("cls");
      cout << "Ya no hay espacio disponible para mas camiones\n\n";
  }
}

void Camion::listaDeCamiones()
{
    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 todas las personas almacenadas en el arreglo de personas
          for (int i=0; i<cantidadDeCamiones;i++)
          {
           listaDeCamiones[i]->imprmir();
          }
          cout<<endl<<"*******Fin de la lista **********"<<endl<<endl;
          }
}
/*
void imprmir()
{
    cout<<setw(10)<<idCamion<<setw(15)<<modeloCamion<<setw(15)<<marcaCamion<<endl;
}*/
Lo que se puede imaginar... se puede programar.

x64core

cpp


#include "cpp1.h"
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
     

Camion::Camion (int idCam, int cilindrajeCam, int puertasCam, int anioCam,
                double precioCam, string marcaCam, string modeloCam,
                string colorCam)
                {
                    idCamion = idCam;
                    cilindrajeCamion = cilindrajeCam;
                    nPuertasCamion = puertasCam;
                    anioCamion = anioCam;
                    precioCamion = precioCam;
                    marcaCamion = marcaCam;
                    modeloCamion = modeloCam;
                    colorCamion = colorCam;

                    Maximo =100;
                    cantidadDeCamiones = 0;
                }
//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;
}
     
void Camion::ingresarCamion()
{
    listaDeCamiones = new Camion*[Maximo];// arreglo de 100
    if (cantidadDeCamiones < Maximo)
    {
     
    system("cls");
    cout << "Ingrese los datos del camion\n";
    cout << "Ingrese el ID del camion: ";
    cin  >> idCamion;
     
    cout << "Ingrese la Marca del Camion: ";
    cin  >> marcaCamion;
     
    cout << "Ingrese el Modelo del camion: ";
    cin  >> modeloCamion;
     
    cout << "Ingrese el año del Camion: ";
    cin  >> anioCamion;
     
    cout << "Ingrese el cilindraje del camion: ";
    cin  >> cilindrajeCamion;
     
    cout << "Ingrese el numero de puertas: ";
    cin  >>  nPuertasCamion;
     
    cout << "Ingrese el color del camion: ";
    cin  >> colorCamion;
     
    cout << "Ingrese el presio del camion: ";
    cin  >> precioCamion;
     
    listaDeCamiones[cantidadDeCamiones] = new Camion(idCamion, cilindrajeCamion,
                                                        nPuertasCamion, anioCamion,
                                                        precioCamion, marcaCamion,
                                                        modeloCamion,colorCamion);
    cantidadDeCamiones++;
     
    cout << "Los datos del camion fueron ingresados correctamente\n\n";
    }
    else
    {
        system("cls");
        cout << "Ya no hay espacio disponible para mas camiones\n\n";
    }
}
     
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 todas las personas almacenadas en el arreglo de personas
            for (int i=0; i<cantidadDeCamiones;i++)
            {
                listaDeCamiones[i]->imprmir();
            }
            cout<<endl<<"*******Fin de la lista **********"<<endl<<endl;
            }
}

void Camion::imprmir()
{
        cout<<setw(10)<<idCamion<<setw(15)<<modeloCamion<<setw(15)<<marcaCamion<<endl;
}


h:

#ifndef CAMION_H
#define CAMION_H
#include <iostream>
using namespace std;


// Variables globales
class Camion
{
    private:
    int idCamion;
    int cilindrajeCamion;
    int nPuertasCamion;
    int anioCamion;
    double precioCamion;
    string marcaCamion, modeloCamion, colorCamion;
     
    public:
    Camion(int =0, int=0, int=0, int=0, double = 0.0, string = "", string = "", string = "");
     
    void setIdCamion(int);
    void setCilindrajeCamion(int);
    void setNPuertasCamion(int);
    void setanioCamion(int);
    void setPrecioCamion(double);
    void setMarcaCamion(string);
    void setModeloCamion(string);
    void setColorCamion(string);
     
    int getIdCamion() const;
    int getCilindrajeCamion() const;
    int getnPuertasCamion() const;
    int getanioCamion() const;
    string getMarcaCamion() const;
    string getModeloCamion() const;
    string getColorCamion() const;
    double getPrecioCamion() const;
     
    //Otros Metodos
    void ingresarCamion();
    void flistaDeCamiones();
    void imprmir();


private:
    Camion**listaDeCamiones;
    int Maximo;
    int cantidadDeCamiones;
     
};
#endif

nolasco281

#13
Ya está, te gradezco mucho por la ayuda y más por el tiempo que te tomaste créeme sea gradece mucho cuando estas trabado y alguien te ayuda. Saludos y mil gracias por la ayuda. y ahora entiendo lo que tratabas de decirme leeré sobre el extern y memoria dinámica para no tener este tipo de problemas. saludos y gracias.
Lo que se puede imaginar... se puede programar.

x64core

ningun extern en realidad, note que todo estaba encapsulado así que mejor decidi agregar las variables a la clase
y que sean disponibles para todas las funciones de esa clase, inicializarlas en el contructor ,el array asignarle memoria al
momento de usarlo ( recorda liberarlo ) aunque hubiera sido bueno incializarlo en el contructor así en el destructor se libera la memoria
eso depende de como diseñes tu programa.

nolasco281

#15
Te comparto una imagenes de como va quedando despues lo arreglare mejor

Cita de: x64Core en  4 Febrero 2014, 04:24 AMel array asignarle memoria al
momento de usarlo ( recorda liberarlo ) aunque hubiera sido bueno incializarlo en el contructor así en el destructor se libera la memoria
eso depende de como diseñes tu programa.

claro lo hare para liberar la memoria. gracias de nuevo.
Lo que se puede imaginar... se puede programar.