2010-12-02 40 views
2

J'ai imbriqué itérateur dans ma classe de modèle de pile personnalisée. Le problème que j'obtiens maintenant est que le constructeur de mon itérateur imbriqué ne correspond pas lorsque je crée un itérateur pour ma pile dans le main. Je me demande quel pourrait être le problème.itérateur C++ pour la classe de modèles personnalisés

template <class T> 
class stack 
{ 
private: 
    int top; 
    T st[100]; 

public: 
    class my_iterator 
    { 
    public: 
     my_iterator() : list(0), curr(0) {}; 

    private: 

     stack<T> list; 
     int curr; 
    }; 

//publics in stack class 
public: 
    stack(); 
    void push(T i); 
    T pop(); 
    void print(); 
    bool is_full(); 
    my_iterator begin() {}; 

}; 

et je crée le iterator pour pile avec la ligne suivante dans le principal

stack<double>::my_iterator it; 
+0

J'ai trouvé le problème maintenant, mais couldn – starcorn

+0

Pourquoi votre itérateur crée-t-il sa propre pile ??? Et un point moindre: Pourquoi votre pile est un tableau de taille fixe? – Sebastian

+0

@Sebastian, je ne voulais pas de tracas avec la liste chaînée, à côté je voulais juste expérimenter un peu donc j'ai utilisé un tableau. Et souvent, il ne devrait pas créer sa propre pile. J'ai fait une erreur là donc j'ai aussi eu une erreur de compilation. – starcorn

Répondre

1

On dirait que vous avez oublié un *:

class my_iterator 
{ 
public: 
    my_iterator() : list(0), curr(0) {}; 
private: 
    stack<T>* pStack; // Pointer to a stack. 
    int curr; 
}; 

Bien sûr, vous avez besoin plus de membres (y compris les meilleurs constructeurs) pour la classe. Mais cela devrait au moins vous permettre de créer des itérateurs par défaut qui ne pointent sur aucune pile en particulier.

0

Je pense que le problème est que votre constructeur par défaut pour la classe stack n'accepte pas de paramètres. Mais ici:

my_iterator() : list(0), curr(0) {}; 

vous passez 0 à ctor.

0

Le problème est la liste d'expressions (0).

changer au lieu de

my_iterator() : curr(0) {}; 

Le membre de la liste sera initialisé default. Si vous voulez une construction spécifique à faire renvoyer le list constructors