2010-04-04 14 views
6

Tengo text.cpp que incluye header.h y header.cpp que incluye header.h.C++ include .h incluye .cpp con el mismo nombre también?

¿Se compilará también header.cpp? Estoy siguiendo una guía aquí, y estoy completamente confundido.

Además, ¿cuál es la terminología correcta para lo que estoy preguntando? Sé que parezco un imbécil, y me disculpo, pero soy ignorante.

Oh, int main() está en test.cpp.

Además, si header.cpp incluye <iostream>, ¿por qué no puedo usar las llamadas a la función iostream en text.cpp si está incluido? Si incluyo <iostream> en text.cpp ¿se incluirá en el programa dos veces (en otras palabras, hincharlo)?

+5

No suena como un imbécil. Un idiota no pide ayuda. – GManNickG

Respuesta

4

Le dice a su compilador qué archivos C++ debe compilar. #include no tiene nada que ver con eso.

Por ejemplo, si está utilizando g ++:

g++ text.cpp // Doesn't compile header.cpp 
g++ text.cpp header.cpp // Compiles both 

(or, alternatively you can compile one file at a time and then link them) 
g++ text.cpp -o text.o 
g++ header.cpp -o header.o 
g++ text.o header.o -o your-program 

Si utiliza Visual Studio y que ha creado un proyecto, todos los archivos de C++ que cree se compilan automáticamente.

Si está utilizando no, dime el nombre de su compilador y te puedo decir la sintaxis exacta :)


Ahora, por su otra pregunta:

Además, si header.cpp incluye iostream, ¿por qué no puedo usar las llamadas a la función iostream en text.cpp si es incluido? Si incluyo iostream en text.cpp, ¿se incluirá en el programa dos veces (en otras palabras, bloat )?

#include indica al compilador que simplemente "copiar todos los contenidos del archivo va a incluir, y pegarlos en la línea # include es". Entonces, en teoría, simplemente podría abrir iostream con el bloc de notas, seleccionar todo, ctrl-c y ctrl-v en su archivo .cpp y el efecto final será exactamente el mismo =)

Entonces sí debe ser incluido para cada archivo .cpp en el que desee usarlo, y no "hinchará" su programa: contiene solo definiciones de clase, funciones externas, etc.

Ah, y esto es evidente, pero C++ es un lenguaje de programación muy extenso y difícil, tendrás mucha mejor suerte aprendiéndolo a través de un libro que de una guía. Si no quiere gastar dinero, un buen libro de C++ gratis (descargable) es Thinking in C++, Bruce Eckel. De lo contrario, si desea comprar uno, puede encontrar una buena lista here.

+0

Muchas gracias. Tendré en cuenta tu consejo. – aaron

+1

Hay una lista de libros de C++ en SO: http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list –

1

header.cpp solo se compila si compila. No se absorbe automágicamente cuando compila test.cpp.Para producir un programa en ejecución, también hay que unir los .o archivos resultantes en un único binario, de la siguiente manera (muy simplificado):

c++ -c test.cpp 
c++ -c header.cpp 
c++ -o test test.o header.o 
0

Usted compilar cada archivo fuente por separado o en conjunto, a continuación, vincular los módulos de objetos resultantes.

E.g. Visual C++ (Juntos)

o por separado,

cl /c text.cpp 
cl /c header.cpp 
link text.obj header.obj /out:foo.exe 

Para obtener una imagen de archivo EXE resultante, foo.exe.

Además, si header.cpp incluye , ¿por qué no puedo usar iostream llamadas a funciones en text.cpp si se incluido? Si incluyo iostream en text.cpp, ¿se incluirá en el programa dos veces (en otras palabras, bloat )?

Dado que los encabezados solo contienen declaraciones, no hay inconveniente en incluirlos muchas veces. No hincharán nada, ya que el compilador los descarta después de verificar el tipo.

Aunque si tiene definiciones de tipo en ellas, necesita #incluir guardias para que los tipos no se redefinan.

Cuestiones relacionadas