自定义分配运算符和迭代器

时间:2013-04-03 01:53:27

标签: c++ iterator variable-assignment operator-keyword

我遇到基本的运算符重载问题。我正在使用以下课程:

template <class T> 
class Node
{
    public:
        Node() {value = NULL; next = NULL; prev = NULL;}
        T* value;
        Node* next;
        Node* prev;   
};    


class fixedList
{
public:
    class fListIterator
    {
    public:
        Node<T>* point;
        fListIterator & operator=(Node<T>* x) {point = x; return this}
    };

    Node<T>* first;
    Node<T>* last
   fListIterator begin() {fListITerator a = first; return a;}
}

template <class T> fixedList<T>::fixedList(int x, T y)
{
     Node<T> data[x];

     for (int z = 0; z < x; z++)
     {
         data[0].value = &y;
     }

     first = &data[0];
     last = &data[x-1];

     Node<T>* assign = first;

     for (int i = 0; i < x - 1; i++)
     {
         Node<T>* temp = new Node<T>;
         temp = &data[i];
         assign->next = temp;
         assign->next->prev = assign;
         assign = assign->next;
     }

}

int main(int argc, char** argv) 
{
    fixedList<int>* test = new fixedList<int>(5, 2);
    fixedList<int>::fListIterator a = test->begin();

    return 0;
}

我一直在begin()函数中得到错误: “从'Node *'转换为非标量类型'fixedList :: fListIterator'请求”

有人能弄明白我做错了吗?

编辑: 道歉,我试图保持紧凑。

2 个答案:

答案 0 :(得分:0)

当你在相等运算符中返回this时,程序会尝试返回你从中调用它的Node*(因为它接受Node<T>*作为参数)。

答案 1 :(得分:0)

fListIterator begin() {fListITerator a = first; return a;}

声明fListITerator a = first;是一种结构。您正试图以fListIterator作为参数调用Node<T>*的构造函数 - 除非您没有!{/ p>

如果你在两个陈述中破坏了这段代码:

fListIterator begin() {fListITerator a; a = first; return a;}

它会:

  • 使用a的默认构造函数构造fListIterator(因为您没有明确提供构造函数,编译器会自动为您生成一个);
  • 使用first重载
  • a分配给operator=
  • 正确退回a

然而,您应该小心:正如user1167662的答案所指定的那样,您的fListIterator::operator=未返回正确的值。在这种情况下,this的类型为fListIterator*