Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Mordecai en 14 Septiembre 2013, 02:59 am



Título: Problema con ejercicio de separar interfaz de implementación de una clase
Publicado por: Mordecai en 14 Septiembre 2013, 02:59 am
Hola! Como están?  ;D

Éste es mi primer mensaje en este foro (sí, ya leí las reglas y normas del foro). Siempre me gustó el tema de la informática y quería adentrarme en el tema del hacking, y como no entendía mucho, pensé que una buena forma sería empezar primero por aprender un lenguaje de programación, por lo que decidí aprender C++.

Empece a leer el libro "C++: Como programar" de Deitel. Me resulto todo bastante fácil hasta que me encontré con un problema. En un ejercicio, me pide que cree un archivo de encabezado con una clase, y me recomienda que es mejor definir las funciones miembro de dicha clase en un archivo de código de fuente separado. Por lo que me quedarían dos archivos:

LibroCalificaciones.h

Citar
#include <string>
using std::string;

class LibroCalificaciones
{
public:
    LibroCalificaciones(string); // Constructor que inicializa a nombreCurso
    void establecerNombreCurso(string); // Función que establece el nombre del curso
    string obtenerNombreCurso(); // Función que obtiene el nombre del curso.
    void mostrarMensaje(); // Muestra mensaje de bienvenida.
private:
    string nombreCurso; // Nombre del curso para este LibroCalificaciones
};

LibroCalificaciones.cpp

Citar
#include <iostream>

    using std::cout;
    using std::endl;

#include "LibroCalificaciones.h"


// El constructor inicializa nombreCurso con el objeto string suministrado como argumento.
LibroCalificaciones::LibroCalificaciones(string nombre)
{
    establecerNombreCurso(nombre); // Inicializa nombreCurso
}

// Función para establecer nombreCurso
void LibroCalificaciones::establecerNombreCurso(string nombre)
{
    nombreCurso = nombre; // Almacena el nombre del curso en el objeto.
}

// Función para obtener el nombre del curso.
string LibroCalificaciones::obtenerNombreCurso()
{
    return nombreCurso;
}

// Muestra un mensaje de bienvenida.
void LibroCalificaciones::mostrarMensaje()
{
    cout << "Bienvenido al libro de calificaciones para\n" << obtenerNombreCurso()
        << "!" << endl;
}

Y luego creo el programa cliente:

Libro.cpp
Citar
#include <iostream>
    using std::cout;
    using std::endl;

#include "LibroCalificaciones.h"

int main()
{
    LibroCalificaciones libroCalificaciones1("CS101 Introduccion a C++");
    LibroCalificaciones libroCalificaciones2("CS102 Estructuras de Datos");

    cout << "libroCalificaciones1 creado para el curso: " << libroCalificaciones1.
        obtenerNombreCurso()
        << "\nlibroCalificaciones2 creado para el curso: " << libroCalificaciones2.
        obtenerNombreCurso() << endl;

    return 0;
}

El problema está en que cuando quiero compilar Libro.cpp, siempre me dice que hubo un error al compilar (uso Visual Studio 2010).
Alguien me podría decir que está mal en el código  :huh: ? Hay algún error en el? Le hace alta algo?

Saludos y espero que me puedan responder  ;D


Título: Re: Problema con ejercicio de separar interfaz de implementación de una clase
Publicado por: erest0r en 14 Septiembre 2013, 04:49 am
Hola, para que te compile mas de un archivo al mismo tiempo existen 2 formas( hasta donde yo conozco), la primera es que lo hagas tipo proyecto de forma que los archivos cpp se ubiquen en una carpeta y cuando compiles el archivo Libro.cpp, te generara el ejecutable, la segunda forma es que por medio de la consola de windows CMD, te ubiques en la carpeta donde estan los archivos cpp, y escribas :


Código:
g++ LibroCalificaciones.cpp Libro.cpp

Eso te generara un ejecutable .a que es tu programa =)