Olvidate de .h y de .cpp. Esas son solo convenciones, la realidad es que ambos son solo códigos que necesitan ser compilados y linkeados. La única diferencia es que uno los vas a usar para las declaraciones y el otro para las definiciones, pero luego de eso las diferencias son nulas.
Si vos haces esto por ejemplo:
main
Código
#include <iostream> #include "persona.h" int main() { return EXIT_SUCCESS; }
persona.h
Código
#ifndef PERSONA_H #define PERSONA_H using namespace std; class Persona{ public: Persona(); Persona(string name,string ape, int t, int ced); virtual ~Persona(); void g_nombre(string name); void g_apellido(string ape); void g_tlf(int t); void g_ci(int ced); string dev_nombre()const; string dev_apellido()const; int dev_tlf()const; int dev_ci()const; protected: string nombre; string apellido; int tlf; int ci; }; #endif
Eso no te debería dar ningún warning. Por que? porque los prototipos son suficientes para el compilado y el linkeado ya que en ningún momento necesitas ninguna definición. Ahora que pasa si intentamos instanciar una clase persona en main? obviamente nos da un error en el linker porque las definiciones no se encuentran. Y es ahí donde entra el persona.cpp (que se podría llamar nuevohh.cpp, que tenga el mismo nombre es solo para que te ordenes vos mismo)
Lo importante es que sepas que el IDE no va a buscar el archivo por vos.
Luego de saber eso, mira las preguntas que te he hecho antes y analizalo.
Y como consejo (no viene mucho al caso pero no esta de mas): La idea de dividir las definiciones y las declaraciones en distintos archivos es simplemente para tener el código mas ordenado. Alguien que quiera ver como funciona una clase no necesita ver como esta implementa sus métodos, y viceversa sucede exactamente lo mismo. Por lo tanto en clases complejas si se dividen los archivos, ahora si todos tus métodos tienen una sola linea, no tiene sentido definirlos en otros archivos, al menos que esa clase tienda a volverse mas compleja con el tiempo.
Saludos!