【问题标题】:C++ iterator for custom template class用于自定义模板类的 C++ 迭代器
【发布时间】:2010-12-02 11:17:27
【问题描述】:

我在自定义堆栈模板类中嵌套了迭代器。 我现在遇到的问题是,当我在 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() {};

};

然后我在 main 中使用以下行为堆栈创建迭代器

stack<double>::my_iterator it;

【问题讨论】:

  • 我现在已经找到问题了,但是找不到
  • 为什么你的迭代器要创建自己的栈???还有一点:为什么你的堆栈是一个固定大小的数组?
  • @Sebastian,我不想麻烦链表,我只是想尝试一下,因此我使用了一个数组。而且它不应该创建自己的堆栈。我在那里犯了错误,因此也出现了编译错误。

标签: c++ templates iterator


【解决方案1】:

您好像忘记了*:

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

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

【讨论】:

    【解决方案2】:

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

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

    你将 0 传递给 ctor。

    【讨论】:

      【解决方案3】:

      问题在于表达式 list(0)。

      改为

      my_iterator() : curr(0) {};
      

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

      【讨论】:

        猜你喜欢
        • 2011-02-26
        • 2010-10-10
        • 1970-01-01
        • 2013-03-26
        • 1970-01-01
        • 2015-11-19
        • 2012-07-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多