Cuando la construcción de mi ++ proyecto de pequeña C, consigo los siguientes 2 errores, no puede averiguar la causa:error al declarar adelante una estructura: "tiene una declaración anterior aquí"
de error: el uso de typedef -name 'TTF_Font' después de 'struct'.
Hace referencia a la siguiente línea de código:struct TTF_Font;
en Foo.h.error: 'TTF_Font' tiene una declaración previa aquí.
Indica la siguiente línea de código:typedef struct _TTF_Font TTF_Font;
en SDL_ttf.h.
me he reducido a los siguientes archivos en un nuevo proyecto de prueba:
foo.h:
#ifndef FOO_H
#define FOO_H
struct TTF_Font;
class Foo
{
TTF_Font* font;
};
#endif // FOO_H
foo.cpp:
#include "Foo.h"
#include "SDL/SDL_ttf.h"
// No implementation, just testing
Principal .cpp:
#include "Foo.h"
int main(int argc, const char* argv[])
{
Foo a;
return 0;
}
¿Ustedes saben lo que estoy haciendo mal?
Mi objetivo es reenviar declarar TTF_Font, por lo que puedo usarlo en mi archivo de cabecera sin incluir el archivo de encabezado SDL_ttf. Leí que incluir los archivos de encabezado en otros archivos de encabezado era una mala práctica, así que cambié a las declaraciones de reenvío. Todas mis otras declaraciones forward funcionan bien excepto esta estructura única.
Cuando reemplazo la declaración directa struct TTF_Font;
con el encabezado incluido #include "SDL/SDL.ttf.h"
, se compila sin errores. Entonces puedo usar eso, pero quiero saber POR QUÉ, maldición :-).
Información adicional: Estoy usando Code :: Blocks IDE con el compilador mingw32. Project usa la biblioteca de gráficos SDL. Todavía no hay mucha experiencia en C++, proviene del pasado C#.
¿Estás seguro de que el fragmento de código para 'Foo.cpp' es correcto? El mensaje de error implica que las cosas en 'Foo.h' están ocurriendo * después de * la inclusión de' SDL_ttf.h'. –