Classe A qui contient B et vice versa : Impossible ?
Salut !
En souhaitant réaliser un Sudoku je suis tombé sur une erreur que je n'arrivais pas à comprendre.
J'ai tout de même réussi à localiser où se trouve le souci et je l'ai extrait du projet pour essayer de le résoudre plus facilement.
Voilà comment je peux illuster le souci. J'essaie de faire ceci :
Soit une classe A qui a pour attribut un pointeur sur une instance de la classe B.
Soit une classe B qui a pour attribut un pointeur sur une instance de la classe A.
Ce qui donne les fichiers suivant : A.h, A.cpp, B.h et B.cpp
Et voilà leur contenu :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| // FICHIER A.h
#ifndef A_H
#define A_H
#include "B.h"
class A
{
private:
B* m_b;
public:
A();
};
#endif |
Code:
1 2 3 4 5 6 7 8 9 10 11
| // Fichier A.cpp
#include <iostream>
using namespace std;
#include "A.h"
A::A() : m_b(NULL)
{
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| // Fichier B.h
#ifndef B_H
#define B_H
#include "A.h"
class B
{
private:
A* m_a;
public:
B();
};
#endif |
Code:
1 2 3 4 5 6 7 8 9 10 11
| // Fichier B.cpp
#include <iostream>
using namespace std;
#include "B.h"
B::B() : m_a(NULL)
{
} |
Voilà les erreurs obtenues lors des compilations :
Citation:
g++ -Wall -c A.cpp
In file included from A.h:4:0,
from A.cpp:5:
B.h:9:3: error: ‘A’ does not name a type
Citation:
g++ -Wall -c B.cpp
In file included from B.h:4:0,
from B.cpp:5:
A.h:9:3: error: ‘B’ does not name a type
Pourriez vous m'expliquer pourquoi cela plante ?
Merci davance.
SmallFitz.