这是一个链接列表,我试图超载==,它给了我错误:错误:传递' const Linked_List为'此&# 39; &ItemH的参数LinkedList :: Element(int)[with ItemType = int]'丢弃限定符。
我必须检查两个链表是否具有相同数量的元素,以及每个元素是否成对相等。
错误指向==的实现部分 这是摘录: P.S:element(i)返回链表的i位置的值
template <typename ItemType>
bool Linked_List <ItemType>::operator == (const Linked_List &eq)const {
if (eq.Items != Items){
return false;
}
if (eq.Items == 0){
return true;
}
for (int i = 0; i < eq.Items; i++){
if (eq.Element(i) != Element(i)){ //error points here
return false;
}
}
return true;
}
这是我的其余代码可能相关的。我没有发布我的所有代码,因为一切正常,包括element(),只有重载不会起作用。
//.h
template <typename ItemType>
class Node
{
public:
ItemType Data;
Node <ItemType> *next;
};
template <typename ItemType>
class Linked_List
{
public:
Node <ItemType> *start;
int Items;
Linked_List();
ItemType Element(int num);
bool operator == (const Linked_List &eq)const;
}
.//cpp
#include "Linked_List.h"
template <typename ItemType>
Linked_List <ItemType>::Linked_List(){
start = NULL;
Items = 0;
}
template <typename ItemType>
ItemType Linked_List <ItemType>::Element(int num){
ItemType result = 0;
if (start == NULL){
return result;
}
Node <ItemType> *nnode;
nnode = start;
int current_position = 0;
while (current_position < num){
current_position++;
nnode = nnode -> next;
}
result = nnode -> Data;
nnode = NULL;
delete nnode;
return result;
}
template <typename ItemType>
bool Linked_List <ItemType>::operator == (const Linked_List &eq)const {
if (eq.Items != Items){
return false;
}
if (eq.Items == 0){
return true;
}
for (int i = 0; i < eq.Items; i++){
if (eq.Element(i) != Element(i)){ //error
return false;
}
}
return true;
}
int main(){
Linked_List <int> test8;
Linked_List <int> test7;
cout << (test8 == test7) << endl;
}
答案 0 :(得分:5)
声明为const
的方法只能调用其他const
方法。它们不能是非const方法。在您的情况下,方法operator ==
被声明为const
。在operator ==
内部,您试图调用方法Element
,这是非常量的。这是你的错误。
此外,两个Element
都在
if (eq.Element(i) != Element(i))
无效。第一个调用无效,因为eq
是const
引用,这意味着您无法通过它调用任何非const方法。由于上述原因,第二次通话无效。
要么将Element
方法声明为const
,要么提供第二个const
版本的Element
以及非常量版本const
。我看到你的元素按值返回结果 ,这意味着你可以简单地将它声明为{{1}}。