2017-04-11 4 views
0

Le problème que je suis confronté est que ma classe Structure des données constructor œuvres me permettant de déclarer la classe de longueur variable de parameters:C++ Template VARIADIC Constructeur de la classe de travail avec le paramètre pack mais les fonctions ne

template<class T> 
class Dynarray 
{ 
    private: 
     int size; 
    public: 
     template<class T, typename... Arguments> 
     Dynarray(T item,Arguments...) 
     { 
      size = sizeof...(Arguments); 
     } 
} 

Toutefois, si ajouter la fonction supplémentaire de membre public donc je peux ajouter plus à la classe comme ceci:

template<class T> 
class Dynarray 
{ 
    private: 
     int size; 
    public: 
     template<class T, typename... Arguments> 
     Dynarray(T item,Arguments...) 
     { 
      size = sizeof...(Arguments); 
     } 
     ///////////////////////////////////////////////////////// 
     template<class T, typename... Arguments> 
     void Dynarray<T>::AddGroup(T item, Arguments...) 
     { //Errors C2838, C2059, C2334 

      size += sizeof...(Arguments); 

     } 
     ///////////////////////////////////////////////////////// 
} 

Comment obtenir les codes d'erreur:

C2838 'AddGroup': illegal qualified name in member declaration

C2059 syntax error: '{'

C2334 unexpected token(s) preceding '{'; skipping apparent function body

Y at-il une différence quand il s'agit de modèles de classe entre Constructors et Member Functions comme ça? Connaissez-vous des solutions de contournement?

Répondre

3

intérieur de la définition de la classe, vous ne devriez pas répéter Dynarray<T>: il devrait donc être:

template<typename... Arguments> 
void AddGroup(T item, Arguments...) 
{ 
    size += sizeof...(Arguments); 
} 

(éleminez aussi le double typename T qui est déjà présent pour la classe.)

+1

travaille sur ceci pour la dernière semaine presque sans arrêt et vous venez de sauver ma vie. Merci beaucoup! –