C ++ итератор для пользовательского шаблона - PullRequest
2 голосов
/ 02 декабря 2010

Я вложил итератор в свой класс шаблонов стека.Проблема, которую я получаю сейчас, состоит в том, что конструктор моего вложенного итератора не совпадает, когда я создаю итератор для своего стека в основном.Интересно, в чем может быть проблема.

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;

Ответы [ 3 ]

1 голос
/ 02 декабря 2010

Похоже, вы забыли *:

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

Конечно, вам нужно больше членов (включая лучших конструкторов) для класса. Но это должно, по крайней мере, позволить вам создавать итераторы по умолчанию, которые не указывают ни на какой конкретный стек.

0 голосов
/ 02 декабря 2010

Проблема в списке выражений (0).

Вместо этого измените на

my_iterator() : curr(0) {};

Элемент списка будет инициализирован по умолчанию. Если вы хотите, чтобы какая-то конкретная конструкция выполнялась, обратитесь к списку конструкторов

0 голосов
/ 02 декабря 2010

Мне кажется, проблема в том, что ваш конструктор по умолчанию для класса stack не принимает никаких параметров.Но здесь:

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

вы передаете 0 в ctor.

...