Mi problema es bastante común, lo sé, pero he estado buscando y probando todas las soluciones que encontré y que todavía no funciona. ¡Entonces cualquier ayuda sería muy apreciada! =)Error: uso no válido del tipo incompleto/declaración directa de
¡Gracias de antemano!
que tienen este error durante la compilación:
g++ -ISFML/include -Iclasses/ -W -Wall -Werror -c -o classes/Object.o classes/Object.cpp
In file included from classes/Core.hh:18:0,
from classes/Object.hh:4,
from classes/Object.cpp:1:
classes/MapLink.hh:9:1: error: invalid use of incomplete type ‘struct Object’
classes/MapLink.hh:6:7: error: forward declaration of ‘struct Object’
In file included from classes/Core.hh:19:0,
from classes/Object.hh:4,
from classes/Object.cpp:1:
classes/Player.hh:9:1: error: invalid use of incomplete type ‘struct Object’
classes/MapLink.hh:6:7: error: forward declaration of ‘struct Object’
make: *** [classes/Object.o] Error 1
Así que, básicamente, tengo una principal que contiene (main.cpp)
#include "Core.hh"
int main(void)
{
...
}
Aquí está el archivo de cabecera que contiene toda mi incluye (Core .hh)
#ifndef __CORE_HH__
# define __CORE_HH__
#include ...
#include "Object.hh"
#include "MapLink.hh"
#include "Player.hh"
class Core
{
...
};
#endif /* __CORE_HH__ */
Y a continuación, los archivos que están causando que me molesta (Object.hh)
#ifndef __OBJECT_HH__
# define __OBJECT_HH__
#include "Core.hh"
class Object
{
...
};
#endif /* __OBJECT_HH__ */
(MapLink.hh)
#ifndef __MAPLINK_H__
# define __MAPLINK_H__
#include "Core.hh"
class Object;
class MapLink : public Object
{
...
};
#endif /* __MAPLINK_H__ */
(Player.hh)
#ifndef __PLAYER_H__
# define __PLAYER_H__
#include "Core.hh"
class Object;
class Player : public Object
{
...
};
#endif /* __PLAYER_H__ */
No debe usar [nombres reservados] (http://stackoverflow.com/questions/228783) para guardias de encabezado; podría dar lugar a problemas como http://stackoverflow.com/questions/3345159 –
Aquí hay una solución para mi propia situación con los mismos errores en su título, pero tal vez no sea para usted: tuve que incluir el encabezado de esa clase bajo denuncia en mi cpp, si el método público de la clase fue referido por otra clase. También tuve dependencias muy complejas y uso mixto de declaraciones forward e incluye. Lo escribo aquí más como una nota que como una solución, ya que usted ya tenía una. – kakyo