• Jueves 28 de Marzo de 2024, 20:32

Autor Tema:  Problema principiante cargar modulo  (Leído 2063 veces)

xuturk

  • Miembro activo
  • **
  • Mensajes: 50
    • Ver Perfil
Problema principiante cargar modulo
« en: Martes 12 de Octubre de 2010, 20:33 »
0
Hola a todos, vengo de java y no estoy muy acostumbrado a la mayoria de las cosas de C++ pero mas o menos entiendo la estructura y como hacer las cosas, el problema que tengo es con Visual C++ 2008 Express.
El caso es que estoy haciendo un programa en modo consola, y tengo archivos .cpp para cada una de las clases, de la misma forma que hacia en java, entonces pongamos que tengo una clase casa en un casa.cpp
Si tengo otro archivo cpp el cual llamo main y el que contiene la funcion main, como puedo hacer para crear objetos de la clase casa por ejemplo? digase como incluyo los datos de los demas modulos que he creado en el main.

Espero haberme explicado.

Muchas gracias y un saludo

Radger

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Problema principiante cargar modulo
« Respuesta #1 en: Martes 12 de Octubre de 2010, 20:43 »
0
Buenas

Veras las clases en c++ se distruyen en 1 archivo .cpp y otro .h. En el .h suele estar la declaracion de la clase y metodos y en el .cpp esta la definicion.

Por lo que para usar la clase casa tendrias que poner #include "casa.h" y ya podrias crear un objeto de casa.Si tienes la declaracion y definicion en el archivo cpp podras incluirlo tambien para usarlo en el main.cpp, aunque lo recomendable para tener el codigo ordenado es tener un .h y .cpp por clase.

Saludos

xuturk

  • Miembro activo
  • **
  • Mensajes: 50
    • Ver Perfil
Re: Problema principiante cargar modulo
« Respuesta #2 en: Miércoles 13 de Octubre de 2010, 18:23 »
0
Hola de nuevo, desde ayer que me  escribiste eso, que he estado intentandolo, pero nada no hay manera, llevas razon en lo de encabezado por que he encontrado mucha informacion por internet, que me viene ha decir mas o menos lo que has puesto tu, pero no hay forma de que me compile, te contare lo que hago a ver si me puedes ayudar:

creo Archivo.h
y dentro escribo
Código: C++
  1.  
  2. class Archivo
  3. {
  4. private:
  5.            int dato;
  6. public:
  7.  void funcion();
  8. }
  9.  
  10.  

depues tengo el .cpp donde relleno lo que he escrito en la clase:
Archivo.cpp

Código: C++
  1.  
  2. #include "Archivo.h"
  3. class Archivo
  4. {
  5.  public:
  6. Archivo::funcion()
  7. {
  8. dato=5;
  9. }
  10. }
  11.  
  12.  

y en el main directamente no escribo nada de eso solo tengo un printf pero de por si no me lo compila, ¿que estoy haciendo mal? se que por mi costumbre a java quizas no estoy haciendo bien las cosas pero por mas vueltas que le doy no consigo avanzar, tambien lei que habia que escribir ifdef o algo asi en las .h pero no se para que y ademas vi ejemplos en los que no se escribia, pero tengo mucho lio en este aspecto.
Muchas gracias y un saludo!

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Problema principiante cargar modulo
« Respuesta #3 en: Miércoles 13 de Octubre de 2010, 19:07 »
0
El problema es que te falta un punto y coma en tu .h y las definiciones en el .cpp no tienen la sintaxis correcta.

Esto debería funcionar con Visual C++:

1. Creas un proyecto vacío.
2. Agregas los siguientes archivos:

Clase1.h:
(Incluye en el ".h" todas las declaraciones y definiciones que deseas que sean visibles al resto del código. Es recomendable evitar agregar "#include" innecesarios en los ".h". Sólo es necesario incluir los encabezados que definan ancestros o miembros de clases definidas en el ".h", para el resto declara las clases indicando al compilador que serán definidas más adelante, ej.: "class Clase2;". )
Código: C++
  1.  
  2. // Este código evita que el precompilador agregue este encabezado más de una vez
  3. #ifndef _CLASE1_H_
  4. #define _CLASE1_H_
  5.  
  6. class Clase1
  7. {
  8. public:
  9.     Clase1(int dato);
  10.     void función();
  11.  
  12.     static Clase1 objetoEstático;
  13. private:
  14.     int _dato;
  15. };
  16.  
  17. #endif
  18.  
  19.  

Clase1.cpp:
(Incluye en el cpp todas las declaraciones y definiciones que NO deseas que sean visibles al resto del código. Si declaras una función o variable que no es miembro de una clase y no deseas que sea visible para otros archivos declárala como "static". Si tu clase utiliza otras clases, variables, tipos, "includes", etc cuya existencia no deseas que sea conocida por el resto del código entonces decláralos dentro del .cpp.)
Código: C++
  1.  
  2. #include <stdio.h>
  3. #include "Clase1.h"
  4.  
  5. Clase1 Clase1::objetoEstático(2);
  6.  
  7. Clase1::Clase1(int dato): _dato(dato)
  8. {
  9. }
  10.  
  11. void Clase1::función()
  12. {
  13.     printf("Dato: %in", _dato);
  14. }
  15.  
  16.  

main.cpp:
Código: C++
  1.  
  2. #include "clase1.h"
  3.  
  4. int main()
  5. {
  6.     Clase1::objetoEstático.función();
  7.     return 0;
  8. }
  9.  
  10.  

Radger

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Problema principiante cargar modulo
« Respuesta #4 en: Miércoles 13 de Octubre de 2010, 19:45 »
0
Buenas

El problema del codigo que pusiste es que declaras 2 veces la clase, pon esto en el Archivo.cpp y deberia compilar.

Código: C++
  1.  
  2. #include "Archivo.h"
  3.  
  4. void Archivo::funcion()
  5. {
  6. dato=5;
  7. }
  8.  
  9.  

xuturk

  • Miembro activo
  • **
  • Mensajes: 50
    • Ver Perfil
Re: Problema principiante cargar modulo
« Respuesta #5 en: Miércoles 13 de Octubre de 2010, 19:57 »
0
Hola de nuevo, muchas gracias por respodner tan pronto, el codigo que puse aqui era inventado jeje no hacia falta que te tomaras la molestia de andar con los mismos nombres, pero muchas gracias, te comento:
He seguido el modelo que has hecho tu, a excepcion del metodo estatico que devuelve un objeto clase, debido a que lo que quiero es crear una clase para que luego en el main pueda crear objetos para instanciarla, varios, pero me ha servido, ahora almenos compila, en el main creo un puntero de tipo habitacion y luego le instancio con new y realizo la accion, tengo unos pocos mas codos que estudiar jejeje pero almenos ya he conseguido hacerlo ahora a ver si me entero un poco mas del asunto, por que no se si es la falta de costumbre pero lo veo mas complicado que java jeje

Muchas gracias de nuevo un saludo :D