[C con Clase] no me acepta files .cpp?????

Salvador Pozo salvador en conclase.net
Jue Dic 21 10:03:54 CET 2006


El pasado 2006-12-21 00:09:44, Rey escribió:
 
R> Esta es una pequeña clase que implemento en un fichero extensión .h, si trato de llevar el método hacia un fichero de código .cpp me da errores de que no estan definidas las variables mEdad.

Hola:

El problema es que estás mezclando declaraciones con definiciones de clases en el mismo fichero.

Lo que debes hacer es separar las declaraciones y las definiciones en ficheros diferentes: las declaraciones en ficheros .h, y las definiciones en ficheros .cpp.

Esto vale para declaraciones y definiciones de clases, pero también para funciones: prototipos en ficheros de cabecera y definiciones en ficheros cpp, y para estructuras, cuyas declaraciones deben estar en ficheros de cabecera.

En general, cualquier parte del programa que genere código o requiera memoria (como las variables u objetos), no pueden estar en ficheros de cabecera.

De este modo, cada fichero fuente que componga tu proyecto podrá incluir el fichero de cabecera que has creado, ya que esto no creará código de ninguna clase, puesto que ese fichero no contiene definiciones, y tu programa podrá usar cualquier clase, función o estructura declarada en el fichero de cabecera.

Cuando se incluyen definiciones en ficheros include, el compilador crea el código correspondiente a esas definiciones. Si ese "include" sólo aparece en uno de los ficheros que componen el proyecto, no pasa nada, pero si se incluye en varios, el enlazador se encontrará con varias definiciones para la misma función o método de clase, y no sabrá cual de ellas elegir (aunque todas sean iguales, el enlazador no entra en esos pormenores, sólo sabe que dispone de varias definiciones para las mismas funciones, y eso representa un conflicto).

Según eso, tu clase se dividiría en dos ficheros:

// unit2.h
#ifndef unit2
#define unit2
class cperro {
 private:
  int mEdad;
 public:
  cperro(): mEdad(15){}
  int Get_Edad();
};
#endif

// unit2.cpp
#include "unit2.h"

int cperro::Get_Edad()
{
  return mEdad;
}

Ahora, para que que sea posible tener un ejecutable se debe enlazar el código objeto correspondiente al fichero unit2.cpp, es decir, que tendrás que incluir ese fichero en el proyecto.

Hasta pronto.

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


Más información sobre la lista de distribución Cconclase