我正在处理链表但不能修改const函数中的当前指针的值“void Print()const”
在我想要做的功能打印“current = head”&然后增加像“current = current-> link”但不能这样做,bcz显示
“错误C3490:'current'无法修改,因为它是通过const对象访问的e:\ Cpp \ projects \ data结构ass-1 \ data结构ass-1 \ source.cpp 83 1数据结构Ass-1 “
#include<iostream>
struct node
{
int data;
node *link;
};
class List
{
node *head,*current,*last;
public:
List();
// List(const List&);
// ~List();
void print() const;
};
using namespace std;
int main()
{
List List1;
}
void List::print() const
{
current=head; //here is my error
current=current->link;
}
List::List():current(head)
{
}
答案 0 :(得分:4)
如果类的成员函数声明为const
:
void print() const;
这意味着,此函数无法修改其类的数据成员。在你的案例变量中:
node *head,*current,*last;
无法在print()
的正文中进行修改。因此,您无法更改这些指针指向的地址。解决此问题的方法是在temp
函数中定义局部变量print()
。可以修改这样的变量,并执行与current
应该做的相同的工作:
void List::print() const
{
node *temp;
temp=head;
temp=temp->link;
}
答案 1 :(得分:3)
当您声明const
成员函数时,this
指针在const
函数内变为const
时,为对象调用它。
意味着const
成员函数阻止对类的数据成员进行任何直接或直接修改。
Direct意味着你正在程序中执行的操作(直接在const
成员函数中修改数据成员,这违反了它的目的)。除非您不修改数据成员,否则可以执行任何涉及数据成员的操作。此外,您可以在const
成员函数中调用其他const
成员函数。
而间接意味着您甚至无法调用该类的其他non-const
成员函数,因为它们可能会修改数据成员。
当您只想获取/读取值时,通常会使用const
个成员函数。因此,在您的情况下,您不应使用const
成员函数。
此外,您可以为non-const
对象调用const
和non-const
成员函数。
答案 2 :(得分:2)
您将print()函数声明为const。这意味着该函数不会修改类的成员变量,这是您在函数定义中首先要做的事情。
答案 3 :(得分:1)
将node *head,*current,*last;
修改为mutable node *head,*current,*last;
答案 4 :(得分:0)
错误告诉您到底发生了什么 - 当您说List::print() const
时,您承诺不会修改列表中的任何成员。但接着你去尝试修改current
。
如果没有看到其余代码,很难说,但current
可能不应该是成员变量,而应该是List::print()
的本地变量。或许List::print()
不应该是常量。你也可以让current
变得可变,但这几乎总是不好的做法。
答案 5 :(得分:0)
将current
声明为方法打印的本地变量。如果您将current
用作其他目的的成员变量,则局部变量将对其进行遮蔽。如果您没有使用current
作为成员变量,那么您可以删除它。