2011-10-19 3 views
0

J'ai donc une classe qui contient une structure dans ses variables privées et dans cette structure j'ai un tableau où la taille du tableau est seulement déterminée après la construction de la classe.Construire une classe avec une structure interne C++

template <typename T> 
class btree { 

    public: 
    btree(size_t maxNodeElems); 
    ~btree() {} 

    private: 
    // The details of your implementation go here 
    size_t maxNodeElems; 
    struct node { 

     list <T> elements; 
     node lvl[]; 

    }; 

}; 

Tout d'abord, dois-je faire de sorte que son node * lvl et comment puis-je appeler les variables à l'intérieur de cette structure? Est-ce la même chose qu'une variable privée, alors chaque fois que je l'utilise dans l'une des fonctions btree class, je peux l'appeler btree.lvl ou est-ce btree->node->lvl ou existe-t-il une façon particulière de le faire?

Aussi, mon tableau doit être de maxNodeElems+1 si quelqu'un peut m'aider, ce serait très apprécié!

Répondre

3

Vous venez de déclarer le type, pas un objet réel de ce type. Vous devez faire votre déclaration struct public et privé de l'objet:

template <typename T> 
class btree { 

    public: 
    btree(size_t maxNodeElems); 
    ~btree() {} 

    struct node { // <- this is just a declaration of a private inner-class 
     list <T> elements; 
     node lvl[]; 
    }; 

    private: 
    size_t maxNodeElems; 
    node* memberNode; // <- this is the actual private member 

}; 

Vous pouvez créer des objets de ce type à l'extérieur:

btree<A>::node* n = new btree<A>::node; 

Pour les membres un accès, vous pouvez avoir getters publics & setters dans votre classe btree:

class btree { 
public: 
    node* getNode() 
    { 
     return memberNode; 
    } 
    //........... 
    //........... 
}; 

EDIT:

Les travaux suivants pour moi (membre) d'initialisation:

template <typename T> 
class btree { 

    public: 
    btree() 
    { 
     memberNode = new btree<T>::node; 
    } 
    ~btree() {} 

    void init() 
    { 
     memberNode->lvl = new node[10]; 
    } 

    struct node { // <- this is just a declaration of a private inner-class 
     list <T> elements; 
     node* lvl; 
    }; 

    private: 
    size_t maxNodeElems; 
    node* memberNode; // <- this is the actual private member 

}; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    btree<char> b; 
    b.init(); 
} 
+0

voilà ce que cela veut dire, je peux le faire 'n> lvl = nouveau noeud [maxNodeElems + 1],' 'si je change noeud lvl []' à 'node * lvl'? – SNpn

+0

Oui. Vous pouvez le faire directement dans la classe (j'ai nommé ma variable memberNode). Les membres de la structure sont publics par défaut, cela devrait donc fonctionner. –

+0

son jeter un tas d'erreurs quand j'essaye 'memberNode = new btree :: node;' principalement 'btree.tem: 8: erreur: ne peut pas convertir 'int *' en 'btree :: noeud *' dans l'affectation' – SNpn

Questions connexes