2009-11-24 15 views
9

Estoy compilando algún código que se basa en incluir guardias para evitar múltiples definiciones de objetos y funciones, pero Visual Studio 2008 me está dando errores de enlace que indican que hay varias definiciones. No entiendo por qué porque he usado código muy similar a esto antes y no ha causado problemas. Debo estar haciendo algo tonto, pero no tengo idea de qué se trata. También traté de eliminar los guardias de inclusión y usar #pragma una vez, pero obtengo los mismos errores de enlace. ¿Qué debo verificar?¿Por qué no se incluyen guardias o pragma una vez que estén funcionando?

Respuesta

17

Si son errores del enlazador, la causa más probable probablemente sean las funciones no en línea definidas en el encabezado.

Si tiene una función no en línea en un encabezado que se incluye en más de un archivo fuente, se definirá en cada uno de esos archivos fuente ("unidades de traducción"), por lo que la función se definirá más de una vez, de ahí el error de definiciones múltiples.

+0

Sí, tienes razón ... oops. ¡Gracias! – Stewart

+0

también puede hacer que sean símbolos débiles haciéndoles plantillas –

0

Si obtiene errores del enlazador ... ¿está seguro de que no está 1) definiendo realmente una función dos veces en el código o 2) tratando de hacer algo tonto como #include un archivo fuente (en lugar de un archivo de encabezado)?

0

Esto también puede deberse al uso de diferentes versiones de cstd lib desde el enlace de otra biblioteca. Compruebe en la sección de generación de C++/Código y asegúrese de que todos sus proyectos utilicen la misma configuración.

Cuestiones relacionadas