我遇到基本的运算符重载问题。我正在使用以下课程:
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'请求”
有人能弄明白我做错了吗?
编辑: 道歉,我试图保持紧凑。
答案 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*
。