1

为类型赋值似乎是一个奇怪的问题,这让我感到困惑。这是给我问题的代码:

1. ListIterator<int> itr = lst.begin();
2.itr++;
3.itr = lst.begin();

所以第 1 行和第 2 行工作正常;但是,当我在声明后尝试使其 itr = lst.begin() 时,出现以下错误:

ListMain.cpp:46: error: no match for ‘operator=’ in ‘itr = lst. List<T>::begin [with T =      int]()’
List.h:183: note: candidates are: void ListIterator<T>::operator=(ListIterator<T>&)   [with T = int]

现在我的 operator= 目前是这样的:

void operator = (iterator & rhs) {theList = rhs.theList; currentLink = rhs.currentLink;}

因此,由于我的 begin() 函数返回一个 ListIterator,这不应该只是重新分配列表迭代器还是我错过了什么?

对此问题的任何见解将不胜感激。

4

1 回答 1

2

operator=通过非常量引用来接受它的论点。因此,临时对象(例如由 返回的对象begin())无法绑定到它。如果您需要自定义复制分配运算符,请按如下方式更改:

void operator = (const iterator & rhs) {theList = rhs.theList; currentLink = rhs.currentLink;}

此外,为了使操作符符合标准库的要求,您应该更改它以返回对分配给的对象的引用:

iterator& operator = (const iterator & rhs) {
  theList = rhs.theList;
  currentLink = rhs.currentLink;
  return *this;
}

最后,您是否需要自定义赋值运算符?你所做的只是分配成员。如果他们都是成员,最好完全删除运算符并依赖编译器生成的运算符。

于 2013-10-16T07:10:05.170 回答