2010-10-29 6 views
0

Je suis nouveau en C++. Voici le code:Problème simple de définition de modèle C++

template <class T> typename lw_slist { 
    // .... some code 
    private:  

     typedef struct _slist_cell { 
      _slist_cell *next; 
      T data; 
     } slist_cell; 

     lw_slist::slist_cell *root; 
}; 

Donner cette erreur de compilation:

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

Pourquoi?

Répondre

1

Une toute nouvelle question, une toute nouvelle réponse:

Je pense que vous voulez comme ceci:

template <class T> 
class lw_slist { 
    // .... some code 
    private:  
     struct slist_cell { 
      slist_cell *next; 
      T data; 
     }; 

     slist_cell *root; 
}; 

Il n'y a pas de raison d'utiliser un typedef: C++ fait des classes et des structures automatiquement une partie de l'espace de noms.

Il n'y a aucune raison d'utiliser lw_slist :: slist_cell car slist_cell est déjà dans l'espace de noms actuel.

La raison pour laquelle vous receviez l'erreur dependent name is not a type est que dans une déclaration de modèle C++ ne peut pas dire si lw_slist<T>::slist_cell est supposé être un type ou une variable. Il suppose une variable nommée slist_cell et vous devez utiliser typename pour dire le contraire.

+0

Merci beaucoup. Je ferais mieux d'avoir un regard profond sur certains tutoriels. – solotim

7

C'est une erreur car ce n'est pas du tout une déclaration. Le compilateur doit savoir si vous voulez un class, struct, enum, union ou autre chose typename n'est pas le bon mot-clé à utiliser.

Vous probablement recherchez ceci:

template<class T> 
struct lw_slist { 
}; 
+0

Merci pour la réponse. J'ai mis à jour la question depuis que si j'ai changé 'typename' à' class', le compilateur a alors dit 'warning C4346: 'lw_slist :: slist_cell': le nom dépendant n'est pas un type \ nprefix avec 'typename' pour indiquer un type' – solotim