Esta es el arreglo más válida que te podemos dar, sin embargo mírala pausadamente y analiza si se puede adaptar a tu trabajo.
Solución:
El sistema de compilación de C++ (compilador) no conoce la diferencia, por lo que todo es una de las convenciones.
La convención es que los archivos .h son declaraciones y los archivos .cpp son definiciones.
Es por eso que los archivos .h están #incluidos: incluimos las declaraciones.
El archivo .cpp es la unidad de compilación: es el archivo de código fuente real que se compilará (en C++).
Los archivos .h (encabezado) son archivos que se copiarán/pegarán virtualmente en los archivos .cpp donde aparece la instrucción del precompilador #include. Una vez que el código de los encabezados se inserta en el código .cpp, puede comenzar la compilación del .cpp.
Un encabezado (.h
, .hpp
…) el archivo contiene
- Definiciones de clase (
class X ... ;
) - Definiciones de funciones en línea (
inline int get_cpus() ...
) - Declaraciones de funciones (
void help();
) - Declaraciones de objetos (
extern int debug_enabled;
)
Un archivo fuente (.c
, .cpp
, .cxx
) contiene
- Definiciones de funciones (
void help() ...
ovoid X::f() ...
) - Definiciones de objetos (
int debug_enabled = 1;
)
Sin embargo, la convención de que los encabezados se nombran con un .h
el sufijo y los archivos de origen se nombran con un .cpp
el sufijo no es realmente necesario. Uno siempre puede decirle a un buen compilador cómo tratar un archivo, independientemente de su sufijo de nombre de archivo ( -x
para gcc. Me gusta -x c++
).
Los archivos fuente contendrán definiciones que deben estar presentes solo una vez en todo el programa. Entonces, si incluye un archivo fuente en algún lugar y luego vincula el resultado de la compilación de ese archivo y luego el del archivo fuente en sí, entonces, por supuesto, obtendrá errores del enlazador, porque esas definiciones ahora aparecen dos veces: Una vez en el archivo de origen incluido y, a continuación, en el archivo que lo incluía. Por eso tuviste problemas para incluir el .cpp
expediente.
Si guardas alguna sospecha y capacidad de avanzar nuestro sección eres capaz de añadir una anotación y con mucho gusto lo observaremos.