2010-12-02 12 views
2

カスタムスタックテンプレートクラスにイテレータをネストしました。 ここで問題になるのは、メインスタックのイテレータを作成するときに、ネストされたイテレータのコンストラクタが一致しないということです。私はその問題が何であるか疑問に思います。カスタムテンプレートクラスのC++イテレータ

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() {}; 

}; 

と私はメイン

stack<double>::my_iterator it; 
+0

今、問題が見つかりましたが、できませんでした – starcorn

+0

なぜあなたのイテレータは独自のスタックを作成しますか?そして、より小さい点:なぜあなたのスタックは固定サイズの配列ですか? – Sebastian

+0

@セバスチャン、私はリンクされたリストを手間をかけたくない、私はちょっと実験したかったので、私は配列を使った。そして、それはそれ自身のスタックを作成するべきではありません。私は間違いを犯したため、コンパイルエラーも発生しました。 – starcorn

答えて

1

を参照してください。もちろん

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

を、あなたはクラスのため(より良いコンストラクタを含む)以上の部材を必要としています。しかし、これは少なくとも、特にスタックを指していないデフォルトのイテレータを作成できるようにする必要があります。

0

で次の行で、スタックのためのイテレータを作成し、私はこの問題は、stackクラスのデフォルトコンストラクタがパラメータを受け入れないことだと思います。しかしここに:

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

あなたはctorに0を渡します。

0

問題は式リスト(0)です。

代わりに、リストのメンバーは、デフォルト初期化されます

my_iterator() : curr(0) {}; 

に変更。あなたは*忘れてしまったように見えますが、任意の特定の建設を行うことがしたい場合はlist constructors

関連する問題