Bonjour à toutes et à tous,
Je suis tout nouveau tout neuf !

J'ai créé une classe pour représenter un arbre :

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
class TreeNode
{
    public:
        TreeNode* m_parent;
 
        TreeNode() ;
        TreeNode(DataTypeForTree data) ;
        TreeNode(DataTypeForTree data, int ID) ;
        TreeNode(DataTypeForTree data, std::vector<TreeNode* > children) ;
        TreeNode(DataTypeForTree data, std::vector<TreeNode* > children, int ID) ;
 
        ~TreeNode() ;
        void SearchDeepFirst (VisitorInterface* visitor) ;
        int GetID(void) const ;
        void SetChildren (std::vector<TreeNode* > children) ;
        void SetParent (TreeNode* parent);
        void Accept(VisitorInterface* visitor);
 
 
    private:
        std::vector<TreeNode* > m_children ;
        DataTypeForTree m_data ;
        int m_ID ;
};
Je sais qu'il y a beaucoup de pointeurs et qu'on peut peut-être s'en passer, mais ce sera dans un second temps, là j'essaie surtout de faire mes dents
Je voudrais savoir comment je peux faire pour accéder intelligemment aux données contenues dans chaque node, encapsulées dans m_data. cet attribut m_data est un objet, qui peut être assez compliqué (pour l'instant c'est volontairement très simple, mais ça va pas le rester très longtemps)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
class ExampleData : public DataTypeForTree
{
    public:
        ExampleData();
        ExampleData(int value);
        virtual ~ExampleData();
        int getValue();
 
    private:
    int m_value;
};
Le code pour le visiteur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
class VisitorDataToString : public VisitorInterface
{
    public:
        VisitorDataToString();
        virtual ~VisitorDataToString();
        void visitNode(TreeNode* node){
    std::cout << node->m_data.GetValue();
}
 
    protected:
    private:
};
Bref vous vous douterez bien que ça ne marche pas, le compilateur m'interdit l'accès à m_data qui est privé. Du coup je me demandais si c'était le bon moment d'utiliser l'amitié entre classes ?
Merci d'avance pour vos réponses,
Bien cordialement,