2017-08-29 7 views
3

Je n'arrive pas à trouver la syntaxe correcte pour écrire un modèle correct pour une classe imbriquée. Je voudrais faire quelque chose comme çaCorriger le modèle pour la classe imbriquée C++

template <typename T> 
class list { 
private: 
    class node { 
    public: 
     T value; 
     node(); 
     ~node(); 
    }; 

public: 
    node<T> *H; 
    list(); 
    ~list(); 
}; 

Je veux avoir une classe pour représenter chaque élément de la classe externe, donc je voudrais avoir la classe interne à l'extérieur caché à l'intérieur. Est-ce possible? Ou devrais-je utiliser une approche différente?

+1

Vous voulez aussi faire de la classe interne un modèle? –

+1

'node' n'est pas un modèle. 'node * H;' devrait fonctionner correctement. – nwp

+0

Sur une note totalement indépendante, si vous avez une classe avec seulement des membres publics, pensez à utiliser 'struct' à la place. Une 'classe' et une' struct' sont exactement les mêmes, c'est juste la visibilité par défaut qui est différente ('private' pour' class', et 'public' pour' struct'). –

Répondre

1

Finalement ce que je cherchais était cela.

template <typename T> 
class list { 
private: 
    template <typename U> 
    class node { 
    public: 
     U value; 
     node(); 
     ~node(); 
    }; 

public: 
    node<T> *H; 
    list(); 
    ~list(); 
}; 

Merci à l'utilisateur qui a premièrement posté cette réponse.

7

Vous n'avez pas besoin de spécifier le paramètre de modèle pour la classe interne (car il n'est pas déclarée comme classe modèle):

template <typename T> 
class list { 
private: 

    class node { 
    public: 
     T value; 
     node(); 
     ~node(); 
    }; 

public: 
    node *H; // <<<<<< 
    list(); 
    ~list(); 
}; 
+0

Je pense que vous devriez répondre qu'avoir un membre «public» d'une classe imbriquée «privée» n'est pas une bonne idée. – muXXmit2X

+0

@ muXXmit2X Les clients peuvent y accéder en utilisant 'auto'. – user0042

+0

Je veux que ce soit un modèle de classe mais je ne savais pas que j'avais besoin de mettre un autre modèle. La première réponse que j'ai eu était la bonne, mais maintenant il semble être parti – fedemengo