Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
遍历定制列表 我已经在C++中给出了一个类声明(创建一个节点列表),我需要定义,并且我遇到了一个成员函数:无效打印()const;代码>_C++_List_C++11_Constants_Nodes - Fatal编程技术网

遍历定制列表 我已经在C++中给出了一个类声明(创建一个节点列表),我需要定义,并且我遇到了一个成员函数:无效打印()const;代码>

遍历定制列表 我已经在C++中给出了一个类声明(创建一个节点列表),我需要定义,并且我遇到了一个成员函数:无效打印()const;代码>,c++,list,c++11,constants,nodes,C++,List,C++11,Constants,Nodes,问题:如何遍历并打印第一个->值,而不删除函数声明中的const,即首先修改?下面的函数产生错误:表达式必须是可修改的左值 类别声明(仅相关细节) 类别定义(仅相关细节) void List::print()常量{ while(第一个!=NULL){ 其次是价值观; } } int List::size()常量{ 返回sz; } 无效列表::添加(int d){ 如果(大小==0) first=新节点(d,NULL),sz++; 否则{ 节点*newnode=新节点(第一个->值,第一个->下一

问题:如何遍历并打印第一个->值,而不删除函数声明中的
const
,即首先修改?下面的函数产生错误:表达式必须是可修改的左值

类别声明(仅相关细节)

类别定义(仅相关细节)

void List::print()常量{
while(第一个!=NULL){
其次是价值观;
}
}
int List::size()常量{
返回sz;
}
无效列表::添加(int d){
如果(大小==0)
first=新节点(d,NULL),sz++;
否则{
节点*newnode=新节点(第一个->值,第一个->下一个);
第一个=新节点(d,新节点);
sz++;
}
}

感谢您的时间

诀窍是先制作一份
副本
,然后只修改副本:(未测试)

Node*firstCopy=first;
while(firstCopy!=NULL){
其次是价值观;
}

您尝试了什么吗?欢迎来到Stack Overflow。请花点时间阅读并参考您可以在此处询问的内容和方式。为什么您认为必须先修改
以遍历列表?为什么要更改
打印
功能中的
?如果这是有原因的,那么为什么您希望它是
const
?我尝试过一个函数,如果您调用该函数一次(因为它修改了它),它就可以工作,所以当您再次调用它时,它不会打印任何内容。我知道建议不要这样做,但是:谢谢。不确定为什么我没有尝试这个。你知道你的原始版本有什么问题吗?@如果是针对OP的,你应该用“@”键ping它们,谢谢@crypt555-确保您理解数据成员(实例变量)和其他变量之间的差异是值得的。@Uffuse是的,我相信我理解它为什么不起作用。我尝试更改声明为
const
的函数中的数据成员。如果成功的话,我只能使用
print()
一次(一次是关于我想要的输出(列表中的值))。对吗?
class List {
public:
     .
     .
     .
    void print() const;
    int size();
    void add(int d);

private:
    int sz = 0;

struct Node {
        int value;  
        Node* next; 
        Node(int v, Node* n) : value(v), next(n) {}
};

    Node* first; // pointer to the first node
};
void List::print() const {
    while (first != NULL) {
        cout << first->value << endl;
        first = first->next;
    }
}

int List::size() const {
    return sz;
}

void List::add(int d) {
    if (size == 0)
        first = new Node(d, NULL), sz++;
    else {
        Node* newnode = new Node(first->value, first->next);
        first = new Node(d, newnode);
        sz++;
    }
}
Node* firstCopy = first;
while (firstCopy != NULL) {
    cout << firstCopy->value << endl;
    firstCopy = firstCopy->next;
}