Cita:
Iniciado por aguml Pues la verdad es que yo tenia entendido que ambos se tenian que llamar igual. ¿como seria para que sean nombres diferentes y lo lea? Yo lo intento y me sale el mismo error que al compañero ya que no encuentra las definiciones de las funciones.
"las definiciones" se encuentran en los archivos de cabecera, mientras que "las implementaciones" suelen estar en los cpp.
El compilador necesita los archivos de cabecera para elaborar un listado de las funciones y métodos del programa... con eso elabora un índice que permite enlazar las diferentes llamadas a funciones y métodos.
A la hora de linkar, el compilador sustituye esas entradas del índice por la dirección real en la que empieza el código de la función. Si resulta que no encuentra la implementación de una función, entonces se produce un error en tiempo de linkado. Al compilador realmente le da igual dónde y cómo esté estructurado el código... el tiene una lista de archivos a compilar y a partir de ellos el intenta crear el programa... si se encuentra con algún problema te lo comunica y listo, no se complica la vida.
Si no se encuentra la firma de una función (es decir, su declaración) el mensaje de error suele ser del tipo 'XXX was not declared in this scope', mientras que los errores por no encontrar la implementación de la función son del tipo 'undefined reference to XXX'.
Si nos encontramos con el error de que no encuentra el archivo de cabecera, debemos comprobar los includes para asegurarnos de que el compilador dispone de todas las firmas necesarias.
En el caso de que el error sea que no se encuentra la implementación de la función, lo que tenemos que hacer es comprobar que el archivo de código (el cpp) está incluído en el proyecto. También tenemos que prestar atención a las dependencias entre archivos. Si todo lo anterior está bien, no está de más asegurarnos que hemos escrito bien los nombres de las clases y métodos (en la llamada, en la firma y en la implementación).
PD.: una forma de comprobar que no es necesario que una clase tenga que estar en un archivo de cabecera con el mismo nombre es que podemos declarar varias clases en un mismo archivo de cabecera (resulta obvio que cada clase tiene que tener un nombre único). Así mismo, también podemos crear todo nuestro programa en un único archivo... y seguirá funcionando. Los nombres de los archivso es una utilidad para el programador, ya que así puede estructurar el código para que le resulte sencillo localizar el fragmento de código que está buscando.