Bonjour,
J'éprouve quelques difficultés à résoudre un problème d'inclusion de fichiers d'en-tête. La situation est simple : j'ai deux classes, définies et implémentées dans leur fichier .hpp, qui s'utilisent mutuellement. Vous trouverez ci-dessous la structure générale de ces deux classes.
Fichier point.hpp
Fichier circular_dll.hpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #ifndef POINT_H_INCLUDED #define POINT_H_INCLUDED class circular_dll; class point { public: point() { _x = 0; _y = 0; _value = 0; _index = 0; _adjacencies = new circular_dll(); } ~point() { ... } ... private: int _index; double _x, _y, _value; circular_dll *_adjacencies; }; #endif
À la compilation, l'erreur provient de la ligne de code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 #ifndef CIRCULAR_DLL_H_INCLUDED #define CIRCULAR_DLL_H_INCLUDED class point; #include "point.hpp" class circular_dll { public: circular_dll() { first = nullptr; last = nullptr; } ~circular_dll() { ... } ... private: class node { public: point *data; node *prev, *next; private: }; node *first, *last, *cursor; }; #endif
Code : Sélectionner tout - Visualiser dans une fenêtre à part _adjacencies = new circular_dll();Lorsque j'ajoute #include "circular_dll.hpp" dans le fichier point.hpp, la classe point devient inutilisable dans le fichier circular_dll.hpp, à cause de l'inclusion circulaire des en-têtes, malgré les #ifndef.'circular_dll' : no appropriate default constructor available
En vous remerciant d'avance,
Nicolas.
Partager