试图编辑链表中的节点,“下一个节点”在我的节点类的私有(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/