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
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.
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)?
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.
- 1. ¿La diferencia entre pragma una vez adentro y afuera incluye guardias?
- 2. ¿"#pragma una vez" tiene el potencial de causar errores?
- 3. ¿Cuál es eficiente usar #pragma una vez o #ifndef #endif?
- 4. ¿Pasó `#pragma una vez` a C++ 0x?
- 5. ¿por qué get() no está funcionando?
- 6. ¿Por qué solo se agrega una vez?
- 7. ¿Para qué se utiliza #pragma?
- 8. ¿Por qué no se recomienda llamar a LoggerFactory.getLogger (...) cada vez?
- 9. C++ guardias de cabecera no se compilará
- 10. ¿Por qué alguna vez scrollTop/scrollLeft no se puede escribir?
- 11. FileSystemWatcher - evento que no se activa por segunda vez
- 12. ¿Por qué no están funcionando las reglas CSS3 @page?
- 13. pitón -> vez que un bucle while ha estado funcionando
- 14. ¿Por qué algunos incluyen necesitan el .h y otros no?
- 15. Encabezado/Incluir guardias no funcionan?
- 16. guardias de cabecera y LNK4006
- 17. #pragma vez Versus # si define MYHEADER_INCLUDED_
- 18. ¿Qué fuentes predeterminadas se incluyen con iText?
- 19. ¿Cómo comprobar si una actividad está funcionando o no
- 20. ¿Se calcula javascript str.length cada vez que se llama o solo una vez?
- 21. ¿Por qué Python no puede encontrar objetos compartidos que estén en directorios en sys.path?
- 22. ¿por qué este programa python no está funcionando?
- 23. ¿Por qué se ejecuta run() solo una vez?
- 24. ¿Por qué recibo una advertencia cada vez que uso malloc?
- 25. ¿Cuál es el significado de #pragma marks? ¿Por qué necesitamos #pragma marks?
- 26. use Logger.getLogger() cada vez que lo necesito o creo una vez por clase
- 27. incluyen cuerda o string.h
- 28. ¿Por qué se ha llamado al destructor una sola vez?
- 29. AutoMapper: ¿Por qué UseValue solo se ejecuta una vez
- 30. ¿Por qué se llama al constructor una sola vez?
Sí, tienes razón ... oops. ¡Gracias! – Stewart
también puede hacer que sean símbolos débiles haciéndoles plantillas –