their includes headers functions files define cpp compile and c++ header include

includes - include class c++



¿Cuáles son las convenciones para los encabezados y archivos cpp en C++? (6)

Consulte Understanding C Compilers para obtener una gran cantidad de buenas respuestas a esta pregunta.

En C ++, ¿cuál es la convención para incluir encabezados para los archivos de clase en el archivo "principal"? p.ej

myclass.h class MyClass { doSomething(); } myclass.cpp doSomething() { cout << "doing something"; } run.cpp #include "myclass.h" #include "myclass.cpp" etc..

¿Es esto relativamente estándar?


No incluye el archivo .cpp, solo el archivo .h. Las definiciones de funciones en .cpp se compilarán en archivos .obj, que luego se vincularán al binario final. Si incluye el archivo .cpp en otros archivos .cpp, obtendrá dos archivos .obj diferentes con la misma definición de funciton compilada, lo que dará lugar a un error del enlazador.


No incluye un * .cpp dentro de otro * .cpp. En lugar:

myclass.h

class MyClass { doSomething(); }

myclass.cpp

#include "myclass.h" MyClass::doSomething() { cout << "doing something"; }

run.cpp

#include "myclass.h" etc..

En lugar de incluir myclass.cpp dentro de main.cpp (de manera que el compilador los vea a ambos en una sola pasada), compila myclass.cpp y main.cpp por separado, y luego permite que el ''enlazador'' los combine en un ejecutable.


Puede decir que un archivo .cpp y todos sus encabezados incluidos componen una unidad de traducción. Como su nombre lo indica, una unidad de traducción se compila por sí misma. El resultado, a menudo denominado file.o o file.obj, de cada unidad de traducción, luego se vincula entre sí por el vinculador, arreglando las referencias aún no resueltas. Entonces en tu caso tienes

Translation Unit 1 = run.cpp: myclass.h ... Translation Unit 2 = myclass.cpp: myclass.h ...

Tendrás la definición de tu clase en ambas unidades de traducción. Pero eso esta bien. Está permitido, siempre que ambas clases estén igualmente definidas. Pero no se permite que aparezca la misma función en las dos unidades de traducción si la función no está en línea. No se permite que las funciones en línea se definan solo una vez, en una sola unidad de traducción. Luego, tiene el vinculador toma el resultado de cada unidad de traducción y los une a un ejecutable:

Executable = mystuff: run.o myclass.o ...


Usted compila archivos cpp por separado. Si incluye un archivo cpp dado en dos o más archivos cpp, puede encontrar un conflicto durante la fase de enlace.


generalmente compila el archivo .cpp por separado y vincula el .o resultante con otros .o

Entonces myclass.cpp incluiría myclass.h y se compilaría como una unidad.