2016-06-24 1 views
0

J'écris un moteur de jeu (en utilisant des librairies SFML) et je n'arrive pas à faire marcher ça. J'écris la partie GUI du code et je veux déclarer un objet de la même classe en lui-même (parent/enfant afin que je puisse lier des objets ensemble). Je ne peux pas faire ceci à moins que la classe soit finie instanciée. Existe-t-il une manière improvisée de forcer les variables enfant et parent à fonctionner d'une façon ou d'une autre?Déclarer un objet en tant que variable membre de lui-même

#ifndef ELEMENT_H 
#define ELEMENT_H 

#include <iostream> 

class Element 
{ 
    public: 
     Element(); 
    private: 
     int id, position_x, position_y, pixel_x, pixel_y, width, height; 

     Element parent; 
     std::vector<Element> child; 
}; 

#endif // ELEMENT_H 

erreur que je reçois:

include\Element.h|13|error: field 'parent' has incomplete type 'Element'| 
+0

Si vous pouviez faire cela, 'Element' aurait une taille infinie. – melpomene

+0

Ooh, bon point .. Et si je leur faisais des pointeurs non déclarés? – Honor

+0

Le fichier d'implémentation existe-t-il? Si ce n'est pas le cas, vous pouvez changer de parent pour être une référence: 'Element & parent' et l'avoir initialisé dans la liste d'initialisation du constructeur. – Jezor

Répondre

1

Vous ne pouvez pas déclarer une variable de jeu de type Class <x> en lui-même comme vous avez là.

Vous pouvez, cependant, une classe qui contient un membre de données qui est un pointeur se ...

#ifndef ELEMENT_H 
#define ELEMENT_H 

#include <iostream> 

class Element 
{ 
    public: 
     Element(); 
    private: 
     int id, position_x, position_y, pixel_x, pixel_y, width, height; 

     Element *parent; 
     std::vector<Element *> child; 
}; 

#endif // ELEMENT_H 
+0

omfg !! Oui! C'est ce qui arrive quand je programme tard dans la nuit xD tyvm – Honor

+0

hahaha heureux d'aider! @Honor –

1

Vous pouvez faire parent de type Element* (ou std::shared_ptr<Element> si vous souhaitez utiliser la fonction des pointeurs intelligents de C++ 11/boost)

Pouvez-vous imaginer le problème d'avoir un élément avec un élément à l'intérieur et un élément à l'intérieur? Cela ne finirait jamais. Typiquement, les chaînes comme celle-ci ont un élément qui est le root, où parent = NULL.

+0

omfg merci beaucoup haha! Je ne pensais pas la nuit dernière x.x – Honor