2012-02-18 5 views
12

Definí una función show() como inline en un archivo de encabezado llamado ex.h y la definición de la función dentro de ex.cpp. Esperé que esto me daría un error ya que el compilador no sabrá qué reemplazar donde se llama a la función show(). Pero debido a que estoy usando un IDE, funcionó bien. ¿Cómo pudo pasar esto?¿La definición de funciones en línea de C++ debe estar en el mismo archivo?

Y, por cierto, cuando traté de compilarlo manualmente me dio un error que el show() se usa pero no está definido.

Respuesta

21

Es imperativo que la definición de la función (la parte entre {...}) se coloque en un archivo de encabezado, a menos que la función se use solo en un solo archivo .cpp.
En particular, si pone la definición de la función en línea en un archivo .cpp y la llama desde otro archivo .cpp, obtendrá un error "unresolved external" del vinculador.

[read more]

4

Normalmente, todas las funciones en línea se encuentran en .h La razón es que el compilador tiene que ver toda la definición en línea por adelantado. Las funciones en línea se compilan directamente 'pegando' el lenguaje de máquina emitido.

6

generalmente Ponemos la función en línea en el archivo de cabecera, por lo que el compilador puede ver la definición al compilar el código que utiliza la función. De esa forma funciona con todos los compiladores.

Algunos compiladores tienen características para optimizar todo el programa a la vez (Whole program optimization o Link time optimization). Estos compiladores pueden alinear una función incluso si está definida en un archivo .cpp diferente.

Cuestiones relacionadas