Foros del Web » Programación para mayores de 30 ;) » C/C++ »

problema en clases c++

Estas en el tema de problema en clases c++ en el foro de C/C++ en Foros del Web. Tengo creada una clase a partir de la cual creo dos subclases en la funcion main del programa. Una de ellas la inicializo con determinados ...
  #1 (permalink)  
Antiguo 14/12/2008, 10:48
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 3
Información problema en clases c++

Tengo creada una clase a partir de la cual creo dos subclases en la funcion main del programa. Una de ellas la inicializo con determinados valores; para la otra, me los pide el programa por defecto (debido a la funcion constructora).

Lo que quiero realizar es copiar la subclase que tengo incializada en la otra.
Consigo que todos los datos se almacenen correctamente en la otra cadena, y prosigue el programa, pero una vez q prosigue el programa vuelve a sus antiguos valores (los introducidos por la funcion constructora). Esto lo he visto en el debugger.

Os paso los códigos:
(están realizados con Visual C++ 2008 Express Edition)
Muchas gracias de antemano! un saludo!


Archivo *.h de la clase
Código:
#pragma once

class cPersona
{
	private:
		int edad;
		float talla;
		char nombre [20];
	public:
		void setEdad (int e);
		int getEdad (void);
		void setAltura(float a);
		float getAltura(void);
		void setNombre(char n[20]);
		char* getNombre(void);
		cPersona ();
		cPersona (int e, float a, char n[20]);
		~cPersona ();
		void copia(class cPersona);
};
Archivo *.cpp de la clase
Código:
#include "cPersona.h"
#include <string.h>
#include <stdio.h>

void cPersona::setEdad (int e)
{
	edad = e;
}
int cPersona::getEdad (void)
{
	return edad;
}
void cPersona::setAltura(float a)
{
	talla = a;
}
float cPersona::getAltura(void)
{
	return talla;
}
void cPersona::setNombre(char n[20])
{
	strcpy_s(nombre, n);
}
char* cPersona::getNombre()
{
	return nombre;
}
cPersona::cPersona ()
{
	printf ("\nEscribe la edad:");
	scanf_s("%d",&edad);
	printf ("\nEscribe la altura:");
	scanf_s("%f",&talla);
	printf ("\nEscribe el nombre:");
	fflush (stdin);		gets_s(nombre);
}
cPersona::cPersona (int e, float a, char n[20])
{
	edad = e;
	talla = a;
	strcpy_s (nombre,n);
}
cPersona:: ~cPersona ()
{
	printf ("La persona %s se autodestruira inmediatamente.\n", nombre);
}

void cPersona:: copia (cPersona p)
{
	p.setEdad (edad);
	p.setAltura (talla);
	p.setNombre (nombre);
}
Función main del programa:
Código:
#include "cPersona.h"
#include <stdio.h>
int main (void)
{
	cPersona p;
	cPersona q(6, 7.6F, "Pedro");
	q.copia (p);
	printf (" La edad de %s es %d\n", p.getNombre(),p.getEdad());
	return 0;
}
  #2 (permalink)  
Antiguo 14/12/2008, 11:20
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: problema en clases c++

consegui solucionarlo metiendo el printf del main dentro de la funcion copiar...pero creo que deberia funcionar sin hacer esas pequeñas "trampas"
  #3 (permalink)  
Antiguo 14/12/2008, 12:06
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: problema en clases c++

ahora tengo otro problemilla! He creado una subclase de cPersonas que se supone que almacena una lista de personas. Tengo un contador (numero) que me dice el numero de personas en la lista.
La función constructora quiero que me inicialice el numero en 0 pero me dice que los constructores no permiten un tipo de valor devuelto. He visto ejemplos en tutoriales en los que dan valores a las variables dentro del constructor y no hay ningún problema (el link marcado corresponde a un ejemplo de C++ Con Clase)
¿¿cómo puedo solventar ese problema?? Gracias
  #4 (permalink)  
Antiguo 15/12/2008, 02:27
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: problema en clases c++

Pone el codigo y el mensaje de error exacto.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 15/12/2008, 10:49
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: problema en clases c++

Subclase: archivo .cpp:
Código:
#include <stdio.h>

#include "cLista.h"
#include "cPersona.h"

cLista::cLista()
{
	numero=0;
}

int cLista::setPersona (cPersona p)
{
	if (numero < 10) 
	{
		personas[numero++] = p;
		return 0;
	}
	else
		return -1;
}
cPersona cLista::getPersona ()
{
	return personas[--numero];
}
Subclase: archivo .h
Código:
#pragma once
#include "cPersona.h"
class cLista
{
private:
	int numero; // numero de personas en la lista
	cPersona personas[10]; // vector de personas
public:
	cLista(); // constructor
	int setPersona(cPersona p); // coloca la persona al final
	// de la lista
	// devuelve 0 si ha ido bien
	// y –1 si no hay sitio
	cPersona getPersona (); // devuelve la última persona que se puso
}
El error exacto que me sale es el siguiente:
Código:
cLista::cLista()
{
	numero=0;
}
'cLista::{ctor}' : los constructores no permiten un tipo de valor devuelto

Ahí supuestamente sólo estoy inicializando "numero" en cero...no?? No entiendo porqué me sale dicho error...y tampoco encuentro forma de solucionarlo.

Gracias de antemano!
  #6 (permalink)  
Antiguo 15/12/2008, 10:57
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: problema en clases c++

En el .h te falta el ; al final de la clase cLista.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 15/12/2008, 10:59
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: problema en clases c++

muchas gracias!! vaya error mas tonto!!!

Última edición por calathea; 15/12/2008 a las 11:15
  #8 (permalink)  
Antiguo 15/12/2008, 11:04
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: problema en clases c++

De nadas
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #9 (permalink)  
Antiguo 05/02/2009, 18:17
 
Fecha de Ingreso: febrero-2009
Mensajes: 2
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: problema en clases c++

Hola amigos tengo un problema necesito hacer un ejercicio con clase sobre estacionamiento y no se trabajar mucho en el, me pide estacionar carros, sacar carro ,cantidad de carro en el estacionamiento,etc y estoy en la nubes espero que ustedes me ayuden
  #10 (permalink)  
Antiguo 06/02/2009, 14:34
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 10 meses
Puntos: 28
Respuesta: problema en clases c++

@jaimedebray: Te recomiendo que abras otro tema y coloques tus dudas de manera mas especifica para que podamos orientarte mejor.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #11 (permalink)  
Antiguo 06/02/2009, 15:50
Avatar de MeduZaPaT  
Fecha de Ingreso: enero-2009
Ubicación: USA
Mensajes: 106
Antigüedad: 15 años, 3 meses
Puntos: 3
Respuesta: problema en clases c++

#include <string.h>
eso no es C++ entre otros errores (como usar printf y punteros a char para hacer strings)

Última edición por MeduZaPaT; 06/02/2009 a las 19:07
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 11:22.