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
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
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
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
À la compilation, l'erreur provient de la ligne de code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
_adjacencies = new circular_dll();
'circular_dll' : no appropriate default constructor available
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.

En vous remerciant d'avance,

Nicolas.