gpt4 book ai didi

C++ 错误 : passing const as 'this' argument

转载 作者:行者123 更新时间:2023-11-30 01:17:49 24 4
gpt4 key购买 nike

这是一个链表,我试图重载 ==,它给了我错误:错误:将'const Linked_List 作为'ItemType Linked_List::Element(int) 的'this'参数传递[ 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;
}

最佳答案

声明为const 的方法只能调用其他const 方法。他们不能使用非常量方法。在您的情况下,方法 operator == 被声明为 const。从 operator == 内部,您正试图调用非常量方法 Element。这是你的错误。

此外,Element 都调用了

if (eq.Element(i) != Element(i))

无效。第一次调用无效,因为 eq 是一个 const 引用,这意味着您不能通过它调用任何非常量方法。由于上述原因,第二次调用无效。

要么将您的 Element 方法声明为 const,要么提供第二个 const 版本的 Element 除了非常量的。我看到您的元素返回其结果按值,这意味着您可以简单地将其声明为const

关于C++ 错误 : passing const as 'this' argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23553859/

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