2011-04-28 12 views
8

Todo estaba funcionando bien hasta que me moví un poco de código del archivo principal a una nueva clase, entonces yo tenía el siguiente error:error de compilación " 'struct' tipo redefinición" aunque es la primera definición para que

error C2011: 'color1' : 'struct' type redefinition

struct color1 
{ 
    color1() 
    { 
     red = green = blue = 0; 
    } 

    color1(float _red, float _green, float _blue) 
    { 
     red = _red; 
     green = _green; 
     blue = _blue; 
    } 

    float red, green, blue; 
}; 

¿Alguna idea?

+2

Véase p. http://stackoverflow.com/questions/2979384/purpose-of-header-guards – Erik

+1

Probablemente esté en un archivo que se incluye dos veces. Agregue guardias pragma al archivo en el que está. –

+1

Claramente, hay más en su programa que esto. ¿Podría reducir su programa al programa completo más pequeño que muestre el error que ve y luego publicar ese programa aquí? –

Respuesta

42

Si el compilador dice que ha redefinido, entonces probablemente lo es.

Mis habilidades de depuración psíquica me dicen que movió la estructura de un archivo de origen a un archivo de encabezado, y se olvidó de incluir guardias en ese encabezado, que luego se incluye varias veces en un archivo fuente.

EDIT: Como regla general por lo general sugieren evitar subrayado iniciales. En algunos casos (por ejemplo, seguido de una letra mayúscula) están reservados para la implementación y es más simple nunca usar el _ líder en lugar de esperar que recuerde todas las reglas.

+3

+1 para una posible respuesta, y otro +1 para guion de subrayado. Desafortunadamente, tiene un límite de +1 en general. –

+2

+1 para la sugerencia de evitar los guiones bajos principales. Por motivos que no tengo claros, veo tantos programadores que siguen usando esos nombres cuando un enfoque similar (pero siempre legal y menos peligroso) sería, por ejemplo, agregarlos al final. – 6502

+0

Tenías razón :(Sneaky rediseñado estructuras! –

11

De fragmento anterior no puedo deducir que algo está mal.

Pero normalmente significa este error que se está incluyendo archivos de cabecera misma varias veces. ¿No te olvidas de agregar guardias estándar para incluir archivos?

#ifndef MY_HEADER_FILE_ 
#define MY_HEADER_FILE_ 

// here is your header file code 

#endif 
+0

Te daré +1 si quitas los caracteres de subrayado iniciales ... –

+0

@Oli Charlesworth: He echado un vistazo a la respuesta anterior y eso parece razonable. también eliminarlos de mi propio código)) – beduin

3

Usted puede tener la definición de la estructura de un archivo de cabecera. Tener

#pragma once 

al principio de la cabecera donde se define la estructura, se resuelve el problema.

Cuestiones relacionadas