gpt4 book ai didi

c++ - Operator=声明问题

转载 作者:行者123 更新时间:2023-11-30 04:13:32 25 4
gpt4 key购买 nike

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

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,这不应该只是重新分配列表迭代器,还是我遗漏了什么?

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

最佳答案

您的 operator= 通过非常量引用获取其参数。因此,临时对象(例如 begin() 返回的对象)无法绑定(bind)到它。如果您需要自定义复制赋值运算符,请将其更改为:

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

此外,为了使运算符符合标准库要求,您应该将其更改为返回对被分配对象的引用:

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

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

关于c++ - Operator=声明问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19397080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com