Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Xephiro en 26 Enero 2012, 01:36 am



Título: [SOLUCIONADO] Problemas con Clases y C++
Publicado por: Xephiro en 26 Enero 2012, 01:36 am
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
Código:
#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
Código:
#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
Código:
#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.


Título: Re: Problemas con Clases y C++
Publicado por: Uknow en 26 Enero 2012, 03:19 am
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.


Código
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4. using namespace std;
  5.  
  6. class Clase
  7. {
  8. public:
  9. // class constructor
  10. Clase(int i);
  11. // class destructor
  12. ~Clase();
  13. // Funcion
  14. int Funcion();
  15.  
  16. private:
  17.        int indice;
  18. };
  19.  
  20. Clase::Clase(int i)
  21. {
  22.    indice = 1000+i;
  23. }
  24.  
  25. // class destructor
  26. Clase::~Clase()
  27. {
  28. }
  29.  
  30. int Clase::Funcion()
  31. {
  32.    return indice;
  33. }
  34.  
  35.  
  36. int main(int argc, char *argv[])
  37. {
  38.    Clase **Clases = new Clase* [sizeof(Clase)];
  39.    cout << "INICIA" << endl;
  40.  
  41.    for (int i = 0; i < 5; i++)
  42.    {
  43.        Clases[i] = new Clase(i);
  44.        cout << Clases[i]->Funcion() << endl;
  45.    }
  46.    cout << "TERMINA" << endl;
  47.  
  48.    for (int i = 0; i < 5; i++)
  49.      delete[] Clases[i];
  50.      delete Clases;
  51.  
  52.    system("PAUSE");
  53.    return 0;
  54. }
  55.  

un saludete : )


Título: Re: Problemas con Clases y C++
Publicado por: Karman en 26 Enero 2012, 04:30 am
Código
  1.    Clase **Clases = new Clase* [sizeof(Clase)];
  2.  

em, nop... el tamaño es el del array, no el de la clase...

Código
  1.    Clase **Clases = new Clase* [5];//5 en este caso...
  2.  

S2


Título: Re: Problemas con Clases y C++
Publicado por: Xephiro en 26 Enero 2012, 06:57 am
Muchas gracias Uknow y Karman, me sirvió completamente su ayuda :D  ;-) ;-)


Título: Re: Problemas con Clases y C++
Publicado por: BlackZeroX en 26 Enero 2012, 07:26 am

Código
  1.    for (int i = 0; i < 5; i++)
  2.      delete[] Clases[i];
  3.      delete Clases;
  4.  
  5.    system("PAUSE");
  6.  

tengo entendido que cuando se declara un tipo de dato ** se proceden a eliminar de esta manera:

Código
  1.    int i = 0;
  2.    for (i = 0; i < 5; i++)
  3.        delete Clases[i];
  4.    delete[] Clases;
  5.  

y en lugar de system("PAUSE"); se puede usar cin.get();

Dulces Lunas!¡.