[SOLUCIONADO] Problemas con Clases y C++

Iniciado por Xephiro, 26 Enero 2012, 01:36 AM

0 Miembros y 1 Visitante están viendo este tema.

Xephiro

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.

Uknow

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 (cpp) [Seleccionar]
#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 : )

Karman

Cita de: Uknow en 26 Enero 2012, 03:19 AM
Código (cpp) [Seleccionar]

    Clase **Clases = new Clase* [sizeof(Clase)];


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

Código (cpp) [Seleccionar]

    Clase **Clases = new Clase* [5];//5 en este caso...


S2

Xephiro

Muchas gracias Uknow y Karman, me sirvió completamente su ayuda :D  ;-) ;-)

BlackZeroX

Cita de: Uknow en 26 Enero 2012, 03:19 AM

Código (cpp) [Seleccionar]

    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:

Código (cpp) [Seleccionar]

    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!¡.
The Dark Shadow is my passion.