自定义模板类的C ++迭代器

时间:2010-12-02 11:17:27

标签: c++ templates iterator

我在自定义堆栈模板类中嵌套了迭代器。 我现在遇到的问题是,当我在main中为我的堆栈创建迭代器时,我的嵌套迭代器的构造函数不匹配。我想知道问题是什么。

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;

3 个答案:

答案 0 :(得分:1)

您似乎忘记了*

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

当然,您需要更多成员(包括更好的构造函数)。但这应该至少允许您创建默认迭代器,而不是特别指向任何堆栈。

答案 1 :(得分:0)

我认为问题是stack类的默认构造函数不接受任何参数。但是在这里:

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

你把0传给了ctor。

答案 2 :(得分:0)

问题是表达式列表(0)。

改为

my_iterator() : curr(0) {};

列表成员将默认初始化。如果您想要完成任何特定构造,请参阅list constructors