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

Problema con definir las funciones miembro de una clase en un cpp separado!

Estas en el tema de Problema con definir las funciones miembro de una clase en un cpp separado! en el foro de C/C++ en Foros del Web. Verán, estoy estudiando C++ en el libro "C++ Cómo Programar de Deitel", y me dice que cuando creo una archivo de encabezado (.h) con una ...
  #1 (permalink)  
Antiguo 25/12/2011, 04:51
 
Fecha de Ingreso: abril-2011
Mensajes: 224
Antigüedad: 13 años
Puntos: 8
Pregunta Problema con definir las funciones miembro de una clase en un cpp separado!

Verán, estoy estudiando C++ en el libro "C++ Cómo Programar de Deitel", y me dice que cuando creo una archivo de encabezado (.h) con una clase es recomendable definir las funciones miembro de la clase en un archivo de código fuente separado. Entonces, quedo con 3 archivos, así:

LibroCalificaciones.h
Código C++:
Ver original
  1. #include <string>
  2. using std::string;
  3.  
  4. class LibroCalificaciones
  5. {
  6. public:
  7.     LibroCalificaciones(string); // Constructor que inicializa a nombreCurso
  8.     void establecerNombreCurso(string); // Función que establece el nombre del curso
  9.     string obtenerNombreCurso(); // Función que obtiene el nombre del curso.
  10.     void mostrarMensaje(); // Muestra mensaje de bienvenida.
  11. private:
  12.     string nombreCurso; // Nombre del curso para este LibroCalificaciones
  13. };

LibroCalificaciones.cpp
Código C++:
Ver original
  1. #include <iostream>
  2.  
  3.     using std::cout;
  4.     using std::endl;
  5.  
  6. #include "LibroCalificaciones.h"
  7.  
  8.  
  9. // El constructor inicializa nombreCurso con el objeto string suministrado como argumento.
  10. LibroCalificaciones::LibroCalificaciones(string nombre)
  11. {
  12.     establecerNombreCurso(nombre); // Inicializa nombreCurso
  13. }
  14.  
  15. // Función para establecer nombreCurso
  16. void LibroCalificaciones::establecerNombreCurso(string nombre)
  17. {
  18.     nombreCurso = nombre; // Almacena el nombre del curso en el objeto.
  19. }
  20.  
  21. // Función para obtener el nombre del curso.
  22. string LibroCalificaciones::obtenerNombreCurso()
  23. {
  24.     return nombreCurso;
  25. }
  26.  
  27. // Muestra un mensaje de bienvenida.
  28. void LibroCalificaciones::mostrarMensaje()
  29. {
  30.     cout << "Bienvenido al libro de calificaciones para\n" << obtenerNombreCurso()
  31.         << "!" << endl;
  32. }

Y por último, el programa cliente de la clase, Programa.cpp (soy bien creativo).
Código C++:
Ver original
  1. #include <iostream>
  2.     using std::cout;
  3.     using std::endl;
  4.  
  5. #include "LibroCalificaciones.h"
  6.  
  7. int main()
  8. {
  9.     LibroCalificaciones libroCalificaciones1("CS101 Introduccion a C++");
  10.     LibroCalificaciones libroCalificaciones2("CS102 Estructuras de Datos");
  11.  
  12.     cout << "libroCalificaciones1 creado para el curso: " << libroCalificaciones1.
  13.         obtenerNombreCurso()
  14.         << "\nlibroCalificaciones2 creado para el curso: " << libroCalificaciones2.
  15.         obtenerNombreCurso() << endl;
  16.  
  17.     return 0;
  18. }

Bueno, ahora mi problema es que el libro me dice que debo compilar primero LibroCalificaciones.cpp, para así obtener el código objeto y blablabla, (NOTA, uso code::blocks con MinGW) pero al darle en compilar, me marca error. "Undefined reference to 'WinMain@16'.

Si trato de compilar "Programa.cpp", me salen los siguientes errores:


C:\Users\Nikolov\Desktop\CPP\Programa.o:Programa.c pp|| undefined reference to `LibroCalificaciones::LibroCalificaciones(std::str ing)'|
C:\Users\Nikolov\Desktop\CPP\Programa.o:Programa.c pp|| undefined reference to `LibroCalificaciones::LibroCalificaciones(std::str ing)'|
C:\Users\Nikolov\Desktop\CPP\Programa.o:Programa.c pp|| undefined reference to `LibroCalificaciones::obtenerNombreCurso()'|
C:\Users\Nikolov\Desktop\CPP\Programa.o:Programa.c pp|| undefined reference to `LibroCalificaciones::obtenerNombreCurso()'|
||=== Build finished: 4 errors, 0 warnings ===|

Y bueno, la única forma de "armar el programa" que he encontrado es crear un proyecto en code::blocks, meterle los 3 archivos y darle en "Build", y así sí funciona, pero no entiendo por qué.

¿Alguien me explica?

Y cómo le hago para hacer lo que me pide el libro, que es "ocultar la forma en que funcionan los funciones miembro al programador cliente de la clase"... osease que compilar LibroCalificaciones.cpp, y darlo ya compilado junto con LibroCalificaciones.h y así arrancar el programa en Programa.cpp?

Saludos, espero me ayuden =/
  #2 (permalink)  
Antiguo 25/12/2011, 17:32
machoman112233
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con definir las funciones miembro de una clase en un cpp separado

Pues no se, lo compila correctamente, al menos con g++. Sera que lo compilas mal.
g++ -o Exec main.cpp LibroCalificaciones.cpp

Etiquetas: c++, code::blocks, mingw, objetos, programacion
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




La zona horaria es GMT -6. Ahora son las 21:33.