2017-10-07 13 views
-3

juste essayer d'obtenir la fonction push de stack.cpp à incrémenter max_size_ variables par 1.accès à des variables membres de la classe agrégée

Array.h:

template <typename T> 
class Array: public BaseArray<T> 
{ 
public: 

//loads of fun code 
private: 
    size_t max_size_; 
}; 

Stack.cpp:

//...even more fun code... 
template <typename T> 
void Stack <T>::push (T element) 
{ 
    ArrayStack::max_size_++; 

} 

Stack.h:

template <typename T> 
class Stack 
{ 
public: 

    Stack (void); 

private: 
    Array <T> ArrayStack; 
}; 

Erreur:

error: ‘ArrayStack’ is not a class or namespace 
    ArrayStack::max_size_++; 

Ou si je le lance avec juste max_size_:

template <typename T> 
void Stack <T>::push (T element) 
{ 

    max_size_++; 
} 

error: ‘max_size_’ was not declared in this scope 
    max_size_++; 
+1

Lecture recommandée: https://stackoverflow.com/questions/495021/why-can-templates-only-be-implement-in-the-header-file – user0042

+0

Vous devriez vraiment obtenir un [bon livre] (https://stackoverflow.com/questions/388242/the-definitive-c- livre-guide-and-list). – Rakete1111

+0

Le '::' est l'opérateur de portée, pas l'opérateur de sélection de membre, qui est '.'. Vous * avez * vu une syntaxe similaire à celle par ex. 'ArrayStack.max_size' avant? Cependant, ce n'est pas votre seul problème, car la variable membre à laquelle vous essayez d'accéder est * private *. Si vous ajoutez un élément à 'Array', la taille ne sera-t-elle pas automatiquement mise à jour dans la classe' Array'? –

Répondre

0

Vous pouvez pas vraiment faire cela sans changer quelque chose. max_size_++; est un membre privé de ArrayStack, donc vous ne pouvez pas le changer à l'intérieur d'une méthode Stack.

Option 1 (mieux): Ajouter une méthode à votre ArrayStack qui incrémente la valeur par un void incMaxSize() { max_size_++; } et l'appeler au lieu

Option 2 (pire): Faire la classe Stack un ami de ArrayStack

Option 3 (encore pire): rendre public la variable max_size_ puis changer l'appel à ArrayStack.max_size_++;

0

Puisque vous avez créé max_size_ private dans votre classe Array, vous devrez créer un getter et un setter pour y accéder en dehors de cette classe. Ensuite, dans votre classe Stack, vous pouvez obtenir la valeur max_size_ et l'enregistrer dans une variable locale, puis la mettre à 1 + sa valeur actuelle pour atteindre max_size _ ++