Bonjour,

J'ai une classe A qui a différent objets dont un objet de classe B.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
class A{
  protected:
    B * m_b;
    ...
  public:
    void methode();
}
};
J'ai besoin d'appeler une méthode de A dans l'objet m_b.

J'ai donc passé le pointeur this au constructeur de B.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
class A;
class B{
  public:
    B(A * a){ m_a = a;} 
  protected:
    A * m_a;
};
}
L'objet m_b était créé ainsi : m_b = new B(this) (dans A).

Tout marchait bien jusqu'à ce que j'ai eu besoin de passer le pointeur de A au sein d'un objet C contenu dans B. J'ai utilisé la même méthode que précédemment mais voici le genre d'erreur de compilation qu'il m'affichait :

In file included from main_window.hh:20, //A
from treeviewpopup.h:24, //C
from treeviewpopup.cpp:12:
onrequestbox.h:40: // B
erreur: «TreeviewPopup» does not name a type

En recherchant sur le net, je me suis aperçu que le passage par référence étant plus approprié.

J'ai donc remanié le code ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
class A{
  protected:
    B * m_b;
    ...
  public:
    void methode(){ m_b = new B(*this);};
}
};
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
class A;
class B{
  public:
    B(A& a):m_a(&a), m_c(a){}; 
  protected:
    A * m_a;
    C m_c;
};
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
class A;
class C{
  public:
    C(A& a):m_a(a){}; 
  protected:
    A * m_a;
};
}
Le compilateur me sort toujours les mêmes erreurs.
Je suis en perdu, comment faire ?