Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: nolasco281 en 4 Febrero 2014, 01:58 am



Título: Que estoy haciendo mal arreglo? (Solucionado)
Publicado por: nolasco281 en 4 Febrero 2014, 01:58 am
Hola como estan.

Como pueden ver estoy declarando esas variables globales.
no se que estoy haciendo mal

perdon se me escapaba explicar esa variable las declaro como glovales en camion.h pero en el archivo de implemetacion a la hora se ser usadas me da ese error

si lo ejecuto en la principal no hay problema.

(http://2.bp.blogspot.com/-RLgiBPib4BA/UvA6bnOnxDI/AAAAAAAAAec/z_UQb0B4fGw/s1600/Pregunta2.png)

y en la funcion de camion.cpp tengo esto

Código
  1. void Camion::ingresarCamion()
  2. {
  3.   if (cantidadDeCamiones < Maximo)
  4.   {
  5.     //Código de las entradas por teclado que capturaran lista de camiones
  6.     cout << "Ingrese los datos del camion\n";
  7.     cout << "Ingrese el ID del camion: ";
  8.     cin  >> idCamion;
  9.  
  10.     cout << "Ingrese la Marca del Camion: ";
  11.     cin  >> marcaCamion;
  12.  
  13. listaDeCamiones[cantidadDeCamiones] = new Camion(idCamion, cilindrajeCamion,
  14.                                                      nPuertasCamion, anioCamion,
  15.                                                      precioCamion, marcaCamion,
  16.                                                      modeloCamion,colorCamion);
  17.     cantidadDeCamiones++;
  18.  
  19.     cout << "Los datos del camion fueron ingresados correctamente\n\n";
  20.   }
  21.   else
  22.   {
  23.       system("cls");
  24.       cout << "Ya no hay espacio disponible para mas camiones\n\n";
  25.   }

el invalid types <unknown type> me imagino que hace referencia a  listaDeCamiones[cantidadDeCamiones]



Título: Re: Que estoy haciendo mal arreglo?
Publicado por: x64core en 4 Febrero 2014, 02:07 am
¿Son esas sentencias escritas dentro de alguna funcion?


Título: Re: Que estoy haciendo mal arreglo?
Publicado por: nolasco281 en 4 Febrero 2014, 02:11 am
No son variables dentro del archivo de encabezado (.h) las cuales según yo pretendo llamar en camion.cpp ya que las declaro como globales


Título: Re: Que estoy haciendo mal arreglo?
Publicado por: nolasco281 en 4 Febrero 2014, 02:13 am
¿Son esas sentencias escritas dentro de alguna funcion?

ya te entendi si exactamente.


Título: Re: Que estoy haciendo mal arreglo?
Publicado por: x64core en 4 Febrero 2014, 02:20 am
No son variables dentro del archivo de encabezado (.h) las cuales según yo pretendo llamar en camion.cpp ya que las declaro como globales
-
Publica el código.


Título: Re: Que estoy haciendo mal arreglo?
Publicado por: nolasco281 en 4 Febrero 2014, 02:30 am
si tienes razon ya ratos me di cuenta de que si lo hacia dentro de la funcion no da error
tienes toda la razon

pero al crear otra funcion que me muestre los datos del camion; que se guardaron en memoria como los saco para mostrarlos en otra funcion.

Código
  1. void Camion::ingresarCamion()
  2.    {
  3.       const int Maximo = 100;
  4.       Camion**listaDeCamiones = new Camion*[Maximo];// arreglo de 100
  5.       int cantidadDeCamiones=0;// controla la cantidad de camiones
  6.  
  7.      if (cantidadDeCamiones < Maximo)
  8.      {
  9.        //Código de las entradas por teclado que capturaran lista de camiones
  10.        cout << "Ingrese los datos del camion\n";
  11.        cout << "Ingrese el ID del camion: ";
  12.        cin  >> idCamion;
  13.  
  14.        cout << "Ingrese la Marca del Camion: ";
  15.        cin  >> marcaCamion;
  16.  
  17.    listaDeCamiones[cantidadDeCamiones] = new Camion(idCamion, cilindrajeCamion,
  18.                                                         nPuertasCamion, anioCamion,
  19.                                                         precioCamion, marcaCamion,
  20.                                                         modeloCamion,colorCamion);
  21.        cantidadDeCamiones++;
  22.  
  23.        cout << "Los datos del camion fueron ingresados correctamente\n\n";
  24.      }
  25.      else
  26.      {
  27.          system("cls");
  28.          cout << "Ya no hay espacio disponible para mas camiones\n\n";
  29.      }


ya que cantidadDeCamiones quedara en la otra funcion al igual que lista de camiones.

Código
  1. void Camion::listaDeCamiones()
  2. {
  3. if (cantidadDeCamiones==0)
  4.              {
  5.                system("cls");
  6.                cout<<"No se a registrado ninguna Camion todavía"<<endl;
  7.              }
  8.              else
  9.              {
  10.                  cout<<"..:::Lista de Camiones:::.."<<endl<<endl;
  11.                  cout<<setw(10)<<"idCamion"<<endl;
  12.                  cout<<"================================================="<<endl;
  13.  
  14.                  //Imprimmir todas los camiones almacenadas en el arreglo de camiones
  15.                  for (int i=0; i<cantidadDeCamiones;i++)
  16.                  {
  17.                      listaDeCamiones[i]->print();
  18.                  }
  19.                  cout<<endl<<"*******Fin de la lista **********"<<endl<<endl;
  20.              }
  21.  
  22. }

esas variables serian declaradas dentro de la funcion


Título: Re: Que estoy haciendo mal arreglo?
Publicado por: x64core en 4 Febrero 2014, 02:44 am
Declaralas globales y las inicializas/creas memoria dinamica en alguna funcion.


Título: Re: Que estoy haciendo mal arreglo?
Publicado por: nolasco281 en 4 Febrero 2014, 02:48 am
Declaralas globales y las inicializas/creas memoria dinamica en alguna funcion.

Me Disculpo no soy muy bueno pero las declaro en la de encabezado o en la de implementación? y cuales variables debo de inicializar y como. No pido código para nada solo una idea. Gracias de antemano.


Título: Re: Que estoy haciendo mal arreglo?
Publicado por: x64core en 4 Febrero 2014, 02:55 am
Me Disculpo no soy muy bueno pero las declaro en la de encabezado o en la de implementación? y cuales variables debo de inicializar y como. No pido código para nada solo una idea. Gracias de antemano.
Generalemente se definen en un .cpp/.c/... y se declaran con extern en un .h.
Declara las variables como globales las que necesites en multiples funciones luego sólo se usan en las funciones.


Título: Re: Que estoy haciendo mal arreglo?
Publicado por: nolasco281 en 4 Febrero 2014, 03:04 am
//entonce quedaria asi la camion.cpp

Código
  1. #include "Camion.h"
  2. #include <iostream>
  3. using namespace std;
  4.  
  5.     extern const int Maximo =100;
  6.     extern Camion**listaDeCamiones = new Camion*[Maximo];// arreglo de 100
  7.     extern int cantidadDeCamiones =0;// controla la cantidad de camiones

y en la .h
Código
  1. #ifndef CAMION_H
  2. #define CAMION_H
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. int Maximo;
  7. Camion**listaDeCamiones = new Camion*[Maximo];
  8. int cantidadDeCamiones;


Título: Re: Que estoy haciendo mal arreglo?
Publicado por: x64core en 4 Febrero 2014, 03:29 am
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.




Título: Re: Que estoy haciendo mal arreglo?
Publicado por: nolasco281 en 4 Febrero 2014, 03:42 am
Aca esta la .h he estado trando de hacer lo que me dices como puedes ver.
Código
  1. #ifndef CAMION_H
  2. #define CAMION_H
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. extern Camion**listaDeCamiones;
  7.  
  8. // Variables globales
  9. class Camion
  10. {
  11.      private:
  12.      int idCamion;
  13.      int cilindrajeCamion;
  14.      int nPuertasCamion;
  15.      int anioCamion;
  16.      double precioCamion;
  17.      string marcaCamion, modeloCamion, colorCamion;
  18.  
  19.      public:
  20.      Camion(int =0, int=0, int=0, int=0, double = 0.0, string = "", string = "", string = "");
  21.  
  22.      void setIdCamion(int);
  23.      void setCilindrajeCamion(int);
  24.      void setNPuertasCamion(int);
  25.      void setanioCamion(int);
  26.      void setPrecioCamion(double);
  27.      void setMarcaCamion(string);
  28.      void setModeloCamion(string);
  29.      void setColorCamion(string);
  30.  
  31.      int getIdCamion() const;
  32.      int getCilindrajeCamion() const;
  33.      int getnPuertasCamion() const;
  34.      int getanioCamion() const;
  35.      string getMarcaCamion() const;
  36.      string getModeloCamion() const;
  37.      string getColorCamion() const;
  38.      double getPrecioCamion() const;
  39.  
  40.      //Otros Metodos
  41.      void ingresarCamion();
  42.      void listaDeCamiones();
  43.      void imprmir();
  44.  
  45. };
  46. #endif

y aca la cpp

Código
  1. #include "Camion.h"
  2. #include <iostream>
  3. #include <iomanip>
  4. using namespace std;
  5.  
  6.     Camion**listaDeCamiones;
  7.     const int Maximo =100;
  8.     int cantidadDeCamiones =0;
  9.  
  10. Camion::Camion (int idCam, int cilindrajeCam, int puertasCam, int anioCam,
  11.                double precioCam, string marcaCam, string modeloCam,
  12.                string colorCam)
  13.                {
  14.                   idCamion = idCam;
  15.                   cilindrajeCamion = cilindrajeCam;
  16.                   nPuertasCamion = puertasCam;
  17.                   anioCamion = anioCam;
  18.                   precioCamion = precioCam;
  19.                   marcaCamion = marcaCam;
  20.                   modeloCamion = modeloCam;
  21.                   colorCamion = colorCam;
  22.                }
  23. //Funciones set
  24. void Camion::setIdCamion(int idCam)
  25. {
  26.     idCamion = idCam;
  27. }
  28.  
  29. void Camion::setCilindrajeCamion(int cilindrajeCam)
  30. {
  31.     cilindrajeCamion = cilindrajeCam;
  32. }
  33.  
  34. void Camion::setNPuertasCamion(int puertasCam)
  35. {
  36.     nPuertasCamion = puertasCam;
  37. }
  38.  
  39. void Camion::setanioCamion(int anioCam)
  40. {
  41.     anioCamion = anioCam;
  42. }
  43.  
  44. void Camion::setPrecioCamion(double precioCam)
  45. {
  46.     precioCamion = precioCam;
  47. }
  48.  
  49. void Camion::setMarcaCamion(string marcaCam)
  50. {
  51.     marcaCamion = marcaCam;
  52. }
  53.  
  54. void Camion::setModeloCamion(string modeloCam)
  55. {
  56.     modeloCamion = modeloCam;
  57. }
  58.  
  59. void Camion::setColorCamion(string colorCam)
  60. {
  61.     colorCamion = colorCam;
  62. }
  63.  
  64. //Funciones get
  65. int Camion::getIdCamion() const
  66. {
  67.    return idCamion;
  68. }
  69.  
  70. int Camion::getCilindrajeCamion() const
  71. {
  72.    return cilindrajeCamion;
  73. }
  74.  
  75. int Camion::getnPuertasCamion() const
  76. {
  77.    return nPuertasCamion;
  78. }
  79.  
  80. int Camion::getanioCamion()const
  81. {
  82.    return anioCamion;
  83. }
  84.  
  85. double Camion::getPrecioCamion() const
  86. {
  87.       return precioCamion;
  88. }
  89.  
  90. string Camion::getMarcaCamion() const
  91. {
  92.       return marcaCamion;
  93. }
  94.  
  95. string Camion::getModeloCamion() const
  96. {
  97.       return modeloCamion;
  98. }
  99.  
  100. string Camion::getColorCamion() const
  101. {
  102.       return colorCamion;
  103. }
  104.  
  105. void Camion::ingresarCamion()
  106. {
  107.   Camion**listaDeCamiones = new Camion*[Maximo];// arreglo de 100
  108.   if (cantidadDeCamiones < Maximo)
  109.   {
  110.  
  111.     system("cls");
  112.     cout << "Ingrese los datos del camion\n";
  113.     cout << "Ingrese el ID del camion: ";
  114.     cin  >> idCamion;
  115.  
  116.     cout << "Ingrese la Marca del Camion: ";
  117.     cin  >> marcaCamion;
  118.  
  119.     cout << "Ingrese el Modelo del camion: ";
  120.     cin  >> modeloCamion;
  121.  
  122.     cout << "Ingrese el año del Camion: ";
  123.     cin  >> anioCamion;
  124.  
  125.     cout << "Ingrese el cilindraje del camion: ";
  126.     cin  >> cilindrajeCamion;
  127.  
  128.     cout << "Ingrese el numero de puertas: ";
  129.     cin  >>  nPuertasCamion;
  130.  
  131.     cout << "Ingrese el color del camion: ";
  132.     cin  >> colorCamion;
  133.  
  134.     cout << "Ingrese el presio del camion: ";
  135.     cin  >> precioCamion;
  136.  
  137.     listaDeCamiones[cantidadDeCamiones] = new Camion(idCamion, cilindrajeCamion,
  138.                                                      nPuertasCamion, anioCamion,
  139.                                                      precioCamion, marcaCamion,
  140.                                                      modeloCamion,colorCamion);
  141.     cantidadDeCamiones++;
  142.  
  143.     cout << "Los datos del camion fueron ingresados correctamente\n\n";
  144.   }
  145.   else
  146.   {
  147.       system("cls");
  148.       cout << "Ya no hay espacio disponible para mas camiones\n\n";
  149.   }
  150. }
  151.  
  152. void Camion::listaDeCamiones()
  153. {
  154.     if (cantidadDeCamiones==0)
  155.     {
  156.       system("cls");
  157.       cout<<"No se a registrado ninguna Camion todavía"<<endl;
  158.       }
  159.       else
  160.       {
  161.           cout<<"..:::Lista de Camiones:::.."<<endl<<endl;
  162.           cout << setw(10)<<"Id Camion"<<setw(15)<<"Modelo"<<setw(15)<<"marca"<<endl;
  163.           cout<<"================================================="<<endl;
  164.  
  165.           //Imprimmir todas las personas almacenadas en el arreglo de personas
  166.           for (int i=0; i<cantidadDeCamiones;i++)
  167.           {
  168.            listaDeCamiones[i]->imprmir();
  169.           }
  170.           cout<<endl<<"*******Fin de la lista **********"<<endl<<endl;
  171.           }
  172. }
  173. /*
  174. void imprmir()
  175. {
  176.      cout<<setw(10)<<idCamion<<setw(15)<<modeloCamion<<setw(15)<<marcaCamion<<endl;
  177. }*/


Título: Re: Que estoy haciendo mal arreglo?
Publicado por: x64core en 4 Febrero 2014, 03:58 am
cpp
Código:

#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:
Código:
#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


Título: Re: Que estoy haciendo mal arreglo?
Publicado por: nolasco281 en 4 Febrero 2014, 04:15 am
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.


Título: Re: Que estoy haciendo mal arreglo? (Solucionado)
Publicado por: x64core en 4 Febrero 2014, 04:24 am
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.


Título: Re: Que estoy haciendo mal arreglo? (Solucionado)
Publicado por: nolasco281 en 4 Febrero 2014, 04:41 am
Te comparto una imagenes de como va quedando despues lo arreglare mejor

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.

claro lo hare para liberar la memoria. gracias de nuevo.


Título: Re: Que estoy haciendo mal arreglo? (Solucionado)
Publicado por: x64core en 4 Febrero 2014, 06:58 am
De nadas suerte  ::)