gpt4 book ai didi

c++ - 无法通过 get 方法编辑私有(private)变量(必须是可修改的左值)

转载 作者:太空宇宙 更新时间:2023-11-04 15:18:33 27 4
gpt4 key购买 nike

试图编辑链表中的节点,“下一个节点”在我的节点类的私有(private)部分中,我添加了一个方法,该方法只返回公开的 Node* 以便在我需要时对其进行编辑,但我收到一个错误,它是可修改的。

在我将下一个节点指针移动到私有(private)部分之前,它在我的公共(public)部分内并且工作正常,我不明白直接编辑“Node* next”或编辑“Node* getNext()”之间有什么区别它返回完全相同的东西,接下来是 Node*。

下面是一些相关的代码:

类节点;

//Node class
class Node
{
private:
Client* client;
Node* next;
public:
Node();
Node(Client*);
Node(Client*,Node*);
~Node();

Client* getClient();
Node* getNext();
};
//end of Node class

setter/getter :

Client* MatchmakingAgency::Node::getClient(){
return client;
}

MatchmakingAgency::Node* MatchmakingAgency::Node::getNext(){
return next;
}

和返回错误的函数:(第 2 行)

void MatchmakingAgency::addNode(Client* data){
(nodeTail->getNext()) = new Node(data);
nodeTail = nodeTail->getNext();
}

错误信息:

Error 1 error C2106: '=' : left operand must be l-value

最佳答案

您正在返回数据成员的拷贝,并且由于它是内置类型,您无法修改它。如果你想通过“getter”修改数据成员,你需要返回对所述成员的引用:

Node*& getNext();

通常的做法是为这种成员函数提供 const 重载:

const Node*& getNext() const;

当然,这引出了一个问题:为什么不使用公共(public)数据成员?将成员设为私有(private)可能有充分的理由,但值得考虑这一点。如果您不维护任何不变量,或不符合某些“接口(interface)”,或者认为您不需要提供访问方法的一些重要实现,则可以使用公共(public)数据成员。

关于c++ - 无法通过 get 方法编辑私有(private)变量(必须是可修改的左值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25474695/

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