0

我在基本运算符重载方面遇到了麻烦。我正在使用以下课程:

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'”

谁能弄清楚我做错了什么?

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

4

2 回答 2

0

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

于 2013-04-03T02:11:52.693 回答
0

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

该语句fListITerator a = first;是一种构造。您正在尝试调用fListIterator以 aNode<T>*作为参数的构造函数-除非您没有!

如果您在两个语句中打破此代码:

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

它会 :

  • a使用默认构造函数构造(fListIterator由于您没有显式提供构造函数,编译器会自动为您生成一个);
  • 分配firsta使用你的operator=重载;
  • 正确返回a

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

于 2013-04-03T02:15:40.353 回答