【发布时间】:2017-09-26 02:19:45
【问题描述】:
我正在尝试创建链表类并定义迭代器,除了最后一个之外,我拥有所有迭代器。我不知道如何修复,当我编译我的代码时出现此错误:
“recList.SortedList::begin with T = Record != recList.SortedList::end with T = Record”中的“operator!=”不匹配 a1q1main.cpp:114:37:注意:候选人是: sortedlist.h:112:11: 注意:SortedList::iterator SortedList::iterator::operator!=(bool) [with T = Record, SortedList::iterator = SortedList::iterator] sortedlist.h:112:11:注意:没有已知的参数 1 从‘SortedList::iterator’到‘bool’的转换
无论我做什么,它都会一直显示此错误 我已经声明了 operator == 并且一切都很好,但是 != 抱怨 这是代码:
class SortedList {
struct Node {
T data_;
Node* next_;
Node* prev_;
Node(const T& data = T{}, Node* next = nullptr, Node* prev = nullptr) {
data_ = data;
next_ = next;
prev_ = prev;
}
};
Node* head_;
Node* tail_;
public:
class const_iterator {
protected:
Node* curr_;
public:
const_iterator(Node* p) {
curr_ = p;
}
.........
const_iterator operator--(int) {
const_iterator tmp = *this;
curr_ = curr_->prev_;
return tmp;
}
const T& operator*() const {
return curr_->data_;
}
const_iterator operator==(bool){
return false;
}
const_iterator operator!=(bool){
return true;
}
return;`
我需要满足以下条件: 运算符!= 如果两个迭代器指向不同的节点,则返回 true,否则返回 false O(1)
我没有完成算子的逻辑,我只需要正确声明它,所以我不会收到错误
【问题讨论】:
-
operator!=(在大多数情况下)采用另一个迭代器并返回一个布尔值,检查您的签名 -
签名应该像
bool operator!=(L, R);。作为一个独立的朋友功能。或者可能bool operator!=(OTHER)作为成员。您已将它们定义为采用 bool 参数并返回迭代器。 -
首先,如果我向它抱怨的函数添加两个参数并说我只需要传递一个参数,第二个布尔运算符!=() 不会改变这种情况并且会弹出相同的错误向上