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

标签 c++ linked-list

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

相关文章:

c++ - 在集合中寻找一个值

c++ - 从文件中读取,存储到链表中,然后再次打印到文件中

c++ - 插入排序链表c++

c++ - 为什么忽略返回类型 'cv'?

c++ - 将无参数通用 lambda 转换为函数指针

java - 对象不重新分配

c++ - 清除单向链表

c - 用另一个值重命名列表

c++ - 不知道参数 1 从 sf::Vector2i 到 const sf::Vector2i<float>& 的转换

c++ - 为多个 session 保留 XPtr