Nueva clase al pulsar un boton

Agrupa todas las consultas sobre los lenguajes de programacion como C, C++, Python, Java ...

Nueva clase al pulsar un boton

Notapor migueleitorone » Mié Mar 16, 2011 4:22 am

buenas, estoy programando un gestor de tareas y estoy atascado con un tema de punteros, aver si me podeis hechar una manito con esto:
El tema es que tengo un clase llamada tarea y quiero que al pulsar un boton, se inicialice la clase. Y al pulsar otra vez el boton se inicialice otra nueva clase.

Habia pensado en esto:
Código: Seleccionar todo
class tarea
{
    //miembros
    //metodos
};

int numeroTareas = 0;
tarea * tareaActiva[10]; //Para poder activar un maximo de 10 tareas

int main()
{
     if(botonPulsado)
     {
           tarea * tarea[numeroTareas] = new tarea;
           numeroTareas++;
     }
}

Pero me da un error de sintaxis en la linea de "tarea * tarea[numeroTareas] = new tarea;", como puedo hacerlo sin complicar mucho el codigo? Es la primera vez que uso memoria dinamica y punteros a arrays y no me aclaro mucho :S

gracias por la ayuda :D
migueleitorone
 
Mensajes: 88
Registrado: Mié Ago 18, 2010 2:59 pm
Ubicación: Barcelona, España

Re: Nueva clase al pulsar un boton

Notapor Juanxo » Mié Mar 16, 2011 4:09 pm

buenas miguel:

No ibas mal encaminado del todo, pero el problema es que has intentado instanciar (crear con memoria dinámica) sobre un array estático ( ya le has dicho en tiempo de compilación cual es su tamaño, así que no puedes cambiar eso)

En su lugar tendrías que hacer esto:

Código: Seleccionar todo
tarea* tareas[10];

for (int i = 0; i < 10 ; ++i)
  tareas[i] = new tarea("Soy la nueva tarea i");
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Nueva clase al pulsar un boton

Notapor migueleitorone » Jue Mar 17, 2011 3:04 pm

gracias juanxo, ya no me tira el error de compilacion. Una preguntita, para referirme a los miembros de la clase, simplemente tengo que usar el operador -> en lugar del .?
Esque tengo un problemilla a la hora de dar valor a una cadena de la clase,
tengo la clase tarea, qeu seria algo asi:
Código: Seleccionar todo
class tarea
{
public:
char titulo[255];
//Y demas miembros
} ;

Y simplemente quiero darle a la cadena de la clase el valor que haya escrito el usuario anteriormente en otra cadena:
Código: Seleccionar todo
char titulo[255];
titulo = "lo que introduzca el usuario";

if(botonPulsado)
{
tareas[numTarea] = new tarea;
tareas[numTarea]->titulo = titulo; //Aqui me tira un error que dice, no se puede realizar la conversión de 'char *' a 'char [255]'
}
migueleitorone
 
Mensajes: 88
Registrado: Mié Ago 18, 2010 2:59 pm
Ubicación: Barcelona, España

Re: Nueva clase al pulsar un boton

Notapor Juanxo » Jue Mar 17, 2011 8:26 pm

yo que tu me hacía un favor y cambiaba todos a std::string, te vas a quitar muchos problemas tontos.

PD:
En cuanto a tus problemas:
char titulo[255];
titulo = "lo que introduzca el usuario";


aqui no estás asignando como tu crees. Lo que haces es:
- Reservo 255 caracteres
- Borro los 255 caracteres
- Reservo longitud de "lo que introduzca el usuario" caracteres y se lo asigno a titulo

tareas[numTarea]->titulo = titulo; //Aqui me tira un error que dice, no se puede realizar la conversión de 'char *' a 'char [255]'

Aquí supongo que quieres copiar los datos al titulo de la clase. El problema es que tu titulo internamente no es más que un puntero, por eso te da el error de que no puede convertir tipos
Con cadenas de arrays, deberías hacer algo así como strcpy(titulo, tareas[indice]->titulo, 255);

Como ves, es un coñazo trabajar con este tipo de cadenas. Hay juegos que lo usan, ya que puede llegar a ser más eficiente, pero te recomiendo que cambies todo a la clase string. Para que veas un ejemplo:

#include <string>

class tarea
{
public:
std::string titulo;
//Y demas miembros
} ;


std::string titulo = "lo que introduzca el usuario";

if(botonPulsado)
{
tareas[numTarea] = new tarea(); //No se que compilador estarás usando, pero la mayoría te exigen los parentesis después de los constructores. Es mejor ponerlos siempre
tareas[numTarea]->titulo = titulo; // Aquí ya no debería tirarte error
}


PD de la PD: hugo se ha currado una nueva etiqueta que se llama codigo. Es preferible usar esta, ya que te colorea el código y queda mejor
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Nueva clase al pulsar un boton

Notapor migueleitorone » Jue Mar 17, 2011 10:24 pm

No habia visto la nueva etiqueta, asi da gusto :D
Voy a tener que usar la funcion strcpy que me decias, por que durante todo el programa he estado manipulando las cadenas casilla por casilla, en plan:
if(teclaAPulsada)
{
cadena[letraActual] = 'a';
}

Pero lo tendre muy en cuenta en el futuro, por que no veas la de problemas que he tenido con los char [] xDDD
Gracias de nuevo tio :D
migueleitorone
 
Mensajes: 88
Registrado: Mié Ago 18, 2010 2:59 pm
Ubicación: Barcelona, España

Re: Nueva clase al pulsar un boton

Notapor Juanxo » Jue Mar 17, 2011 10:40 pm

otro problema típico con los char[]: acuerdate siempre de que el ultimo carácter tiene que ser nulo ( o 0 o '\0') puesto que es la manera que tiene C de marcar el final de una cadena, y algunas funciones y algoritmos tienen este detalle en cuenta
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Re: Nueva clase al pulsar un boton

Notapor migueleitorone » Mié Mar 23, 2011 8:05 pm

Ah no sabia que se podia poner tambien un 0 en lugar del \0. Pues perfecto entonces, a programarrrr :D
migueleitorone
 
Mensajes: 88
Registrado: Mié Ago 18, 2010 2:59 pm
Ubicación: Barcelona, España


Volver a Sobre lenguajes de programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado