成员 "Node::next"(朋友 class 的)无法访问

member "Node::next" (of a friend class) is inaccessible

我正在构建自己的 LinkedList,因为我需要一个特殊的 Node 来保存更多数据。我指定我的 Node class 是 LinkedList class 的朋友,但它似乎不允许我访问 Node 中的私有变量] class 来自 LinkedList class.

Node.h

class Node {
    private:
        Node* next;
    ...
};

LinkedList.h

#include "Node.h"

class LinkedList {
    friend class Node;
    ...
};

LinkedList.cpp

...
void LinkedList::insertFirst(Node* n) {
    Node* temp = this->root;
    this->root = n;
    this->root->next = temp; // 1
}
...

1 这是我收到错误的地方。它说 this->root->next 是不可访问的,但我把它作为我的 LinkedList 的朋友 class,所以它应该可以访问私有变量。

Stack Overflow 上有很多问题与我的问题类似,但 none 似乎是我需要的。

我又看了好几个,但是都和上面说的差不多,都没有帮我解决问题。

我missing/not了解什么?我尝试过的任何方法都没有奏效,如果有任何帮助,我将不胜感激。

A friend 声明将指定 class 的访问权限授予声明 class 的私有成员(即,“class X 那边有一个朋友我的,他有权使用我的私人物品")。

因此,通过将 Node 声明为 LinkedList 内部的 friend,您授予 NodeLinkedList 的私有成员的访问权,而不是反之亦然。

要让 LinkedList 访问 Node::next,您需要将 LinkedList 声明为 Nodefriend

class Node {
    friend class LinkedList;
    ...
};