2009-07-02 19 views

Respuesta

9

Si el encabezado está incluido en más de un archivo fuente y la función no está marcada como "en línea", tendrá más de una definición. Los guardias de inclusión solo evitan inclusiones múltiples en el mismo archivo fuente.

+0

Ya gracias ......... – yesraaj

+0

También quisiera subrayar que la palabra clave 'inline' no es necesaria cuando se habla sobre métodos de clase definidos dentro de la declaración de clase http://stackoverflow.com/a/145952/ 2436175 – Antonio

4

Dado que no está en línea, cada unidad de traducción tendrá su propia copia de la función y la función se definirá varias veces.

7

Estás violando the one definition rule. Si desea definir una función directamente en el encabezado, debe marcarla como inline, lo que permitirá que la función se defina varias veces. También tenga en cuenta que inline no tiene otro significado, particularmente no obliga al compilador a realizar llamadas en línea (contrariamente a la creencia popular).

Cuestiones relacionadas