Estoy recibiendo mucha "redefinición de x .... x definida anteriormente aquí". ¿Qué significa este error?Error del compilador de GCC: "redefinición ... previamente definida"
Respuesta
Probablemente esté incluyendo un archivo de encabezado dos veces. Asegúrese de que sus archivos de encabezado estén rodeados por declaraciones #ifndef
.
http://www.fredosaurus.com/notes-cpp/preprocessor/ifdef.html
es necesario limitar cada archivo se incluya solamente una vez. Puedes hacer esto de 2 maneras.
1) En la parte superior de los archivos de cabecera poner:
#pragma once
o 2) si su compilador no admite eso, poner en la parte superior/final de sus archivos de cabecera:
#ifndef _MYFILE_H_
#define _MYFILE_H_
...
#endif
Reemplace MYFILE con el nombre de su archivo y reemplace ... con el contenido del archivo de encabezado.
El error significa que hay un símbolo que se ha definido en un lugar y una definición alternativa se ha realizado en otro lugar.
Esto puede ocurrir si en casos como:
- si define dos funciones con el mismo nombre
- si hay una discrepancia entre una función y de prototipo
- se llama a un no trivial función antes de que se haya definido, y sin un prototipo
En este último caso habrá una falta de coincidencia entre la función real y la "declaración implícita" que el compilador asume s cuando no tiene un prototipo para usar.
Estas situaciones pueden evitarse por:
- garantía de que los prototipos de las funciones solamente se declaran vez
- Asegurar que todas las funciones tienen nombres únicos dentro de su ámbito de aplicación (es decir, dentro de un archivo si son
static
, o. único si se usan entre archivos de objeto) - Tenga cuidado si usa
extern
declaraciones en archivos fuente para declarar prototipos. Es mejor usar un prototipo del archivo de encabezado apropiado. - Asegúrese de que todas las funciones tengan prototipos, ya sea dentro del archivo fuente en el caso de las funciones
static
, o en un archivo de encabezado si van a ser utilizados por otros archivos de objetos. - Asegúrese de que todos los archivos de cabecera sólo pueden incluirse una vez para cada archivo de origen, mediante uno de los constructos sugeridas por Mehrdad y Brian R. Bondy
- 1. ¿Por qué el error "Redefinición de typedef" con GCC 4.3 pero no con GCC 4.6?
- 2. Inno Setup - #define directive - cómo usar la variable previamente definida?
- 3. ¿Por qué recibo esta redefinición del error de clase?
- 4. Compilador de GCC: ¿error o comportamiento no especificado?
- 5. Desactivar temporalmente la advertencia de gcc en la redefinición
- 6. Error del compilador C#? ¿Por qué no se compila esta conversión implícita definida por el usuario?
- 7. VC++ Error interno del compilador
- 8. Error del analizador XML: entidad no definida
- 9. Error del compilador de GCC al extraer un char de una secuencia temporal
- 10. La clase individual tiene un error de redefinición de clase
- 11. gcc 4.3.3 opciones del compilador habilitadas de forma predeterminada
- 12. Error del compilador de genéricos de Java
- 13. Qt error: referencia no definida a 'gluOrtho2D'
- 14. C89 C99 vs compilador GCC
- 15. MENOS Error del compilador de Ruby
- 16. Error del compilador de C++ ambiguo
- 17. Mensaje de error del compilador: CS0433
- 18. Error del compilador de C++ en netbeans
- 19. gcc error message repository
- 20. Redefinición de constantes en PHP
- 21. función ya definida error en C++
- 22. ¿Cómo redirigir la salida del compilador gcc a un archivo?
- 23. Error del compilador: memset no se declaró en este ámbito
- 24. falta el argumento predeterminado - error del compilador
- 25. g ++ 4.6.1 error del compilador: Error: pseudo-op desconocida: `.cfi_personality '
- 26. LaTeX: redefinición del comando con estrella
- 27. gcc error de precisión?
- 28. Error C2011: 'MSXML2 :: IXMLDOMImplementation': 'struct' redefinición de tipo
- 29. Errores de redefinición de Winsock
- 30. cómo sugieren compilador gcc más probable rama
Creo que #pragma sólo funciona en VC++, no en gcc . El truco #define es portable. – Gorpik
que generó gcc y vC++ –
Wikipedia dice que #pragma una vez es compatible con VC++ y gcc http://en.wikipedia.org/wiki/Pragma_once. –