Hola, miren tengo un problema con código en C++ que es sencillo pero llevo muy poco tiempo programando en C++ y no logro pillar el problema.
El codigo a grandes rasgos es el siguiente:
main.cpp
#include <cstdlib>
#include <iostream>
#include "clase.h"
using namespace std;
int main(int argc, char *argv[])
{
Clase **Clases;
std::cout << "INICIA" << std::endl;
for (int i = 0; i < 5; i++)
{
Clases[i] = new Clase(i);
std::cout << Clases[i]->Funcion() << std::endl;
}
std::cout << "TERMINA" << std::endl;
system("PAUSE");
return EXIT_SUCCESS;
}
clase.h
#ifndef Clase_H
#define Clase_H
/*
* Clase
*/
class Clase
{
public:
// class constructor
Clase(int i);
// class destructor
~Clase();
// Funcion
int Funcion();
private:
int indice;
};
#endif // Clase_H
clase.cpp
#include "clase.h" // class's header file
// class constructor
Clase::Clase(int i)
{
this->indice = 1000+i;
}
// class destructor
Clase::~Clase()
{
}
int Clase::Funcion()
{
return this->indice;
}
Bueno, el código original es mucho mas grande pero con este logre acotar mi problema, lo que pasa es que no logro poder manipular los datos de mis objetos de Clase que se encuentra apuntados desde **Clases. El programa se cierra al momento de ejecutarse. :S
Espero alguien logre darme una mano ya que llevo caso 2 días con la pelea y no logro solucionar mi error.
Si ya estas usando el nombre de espacio, no es necesario usar std::.
El puntero this tampoco es necesario en este caso y cuando reservas memoria lo estas haciendo mal. xP
fijate, prueba a ver si talvez asi te funcione.
#include <iostream>
#include <cstdlib>
using namespace std;
class Clase
{
public:
// class constructor
Clase(int i);
// class destructor
~Clase();
// Funcion
int Funcion();
private:
int indice;
};
Clase::Clase(int i)
{
indice = 1000+i;
}
// class destructor
Clase::~Clase()
{
}
int Clase::Funcion()
{
return indice;
}
int main(int argc, char *argv[])
{
Clase **Clases = new Clase* [sizeof(Clase)];
cout << "INICIA" << endl;
for (int i = 0; i < 5; i++)
{
Clases[i] = new Clase(i);
cout << Clases[i]->Funcion() << endl;
}
cout << "TERMINA" << endl;
for (int i = 0; i < 5; i++)
delete[] Clases[i];
delete Clases;
system("PAUSE");
return 0;
}
un saludete : )
Cita de: Uknow en 26 Enero 2012, 03:19 AM
Clase **Clases = new Clase* [sizeof(Clase)];
em, nop... el tamaño es el del array, no el de la clase...
Clase **Clases = new Clase* [5];//5 en este caso...
S2
Muchas gracias Uknow y Karman, me sirvió completamente su ayuda :D ;-) ;-)
Cita de: Uknow en 26 Enero 2012, 03:19 AM
for (int i = 0; i < 5; i++)
delete[] Clases[i];
delete Clases;
system("PAUSE");
tengo entendido que cuando se declara un tipo de dato ** se proceden a eliminar de esta manera:
int i = 0;
for (i = 0; i < 5; i++)
delete Clases[i];
delete[] Clases;
y en lugar de system("PAUSE"); se puede usar cin.get();
Dulces Lunas!¡.