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
void Camion::ingresarCamion()
{
if (cantidadDeCamiones < Maximo)
{
//Código de las entradas por teclado que capturaran lista de camiones
cout << "Ingrese los datos del camion\n";
cout << "Ingrese el ID del camion: ";
cin >> idCamion;
cout << "Ingrese la Marca del Camion: ";
cin >> marcaCamion;
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";
}
el invalid types <unknown type> me imagino que hace referencia a listaDeCamiones[cantidadDeCamiones]
¿Son esas sentencias escritas dentro de alguna funcion?
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
Cita de: x64Core en 4 Febrero 2014, 02:07 AM
¿Son esas sentencias escritas dentro de alguna funcion?
ya te entendi si exactamente.
Cita de: 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
-
Publica el código.
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.
void Camion::ingresarCamion()
{
const int Maximo = 100;
Camion**listaDeCamiones = new Camion*[Maximo];// arreglo de 100
int cantidadDeCamiones=0;// controla la cantidad de camiones
if (cantidadDeCamiones < Maximo)
{
//Código de las entradas por teclado que capturaran lista de camiones
cout << "Ingrese los datos del camion\n";
cout << "Ingrese el ID del camion: ";
cin >> idCamion;
cout << "Ingrese la Marca del Camion: ";
cin >> marcaCamion;
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";
}
ya que cantidadDeCamiones quedara en la otra funcion al igual que lista de camiones.
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)<<"idCamion"<<endl;
cout<<"================================================="<<endl;
//Imprimmir todas los camiones almacenadas en el arreglo de camiones
for (int i=0; i<cantidadDeCamiones;i++)
{
listaDeCamiones[i]->print();
}
cout<<endl<<"*******Fin de la lista **********"<<endl<<endl;
}
}
esas variables serian declaradas dentro de la funcion
Declaralas globales y las inicializas/creas memoria dinamica en alguna funcion.
Cita de: x64Core en 4 Febrero 2014, 02:44 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.
Cita de: nolasco281 en 4 Febrero 2014, 02:48 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.
//entonce quedaria asi la camion.cpp
#include "Camion.h"
#include <iostream>
using namespace std;
extern const int Maximo =100;
extern Camion**listaDeCamiones = new Camion*[Maximo];// arreglo de 100
extern int cantidadDeCamiones =0;// controla la cantidad de camiones
y en la .h
#ifndef CAMION_H
#define CAMION_H
#include <iostream>
using namespace std;
int Maximo;
Camion**listaDeCamiones = new Camion*[Maximo];
int cantidadDeCamiones;
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.
Aca esta la .h he estado trando de hacer lo que me dices como puedes ver.
#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
#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;
}*/
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
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.
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.
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.
De nadas suerte ::)