成员 "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 似乎是我需要的。
- 一个答案是说从
private
切换到 protected
,但这没有用,它只是将错误更改为无法访问受保护的成员。
- 另一个答案是说他们在朋友声明中有拼写错误。我检查了我的,拼写正确。
- 另一个人说要确保 classes 以正确的顺序声明,但因为我将它们放在不同的文件中,并且
#include
我创建 [=62] 的文件=] 被声明为好友。
我又看了好几个,但是都和上面说的差不多,都没有帮我解决问题。
我missing/not了解什么?我尝试过的任何方法都没有奏效,如果有任何帮助,我将不胜感激。
A friend
声明将指定 class 的访问权限授予声明 class 的私有成员(即,“class X 那边有一个朋友我的,他有权使用我的私人物品")。
因此,通过将 Node
声明为 LinkedList
内部的 friend
,您授予 Node
对 LinkedList
的私有成员的访问权,而不是反之亦然。
要让 LinkedList
访问 Node::next
,您需要将 LinkedList
声明为 Node
的 friend
:
class Node {
friend class LinkedList;
...
};
我正在构建自己的 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 似乎是我需要的。
- 一个答案是说从
private
切换到protected
,但这没有用,它只是将错误更改为无法访问受保护的成员。 - 另一个答案是说他们在朋友声明中有拼写错误。我检查了我的,拼写正确。
- 另一个人说要确保 classes 以正确的顺序声明,但因为我将它们放在不同的文件中,并且
#include
我创建 [=62] 的文件=] 被声明为好友。
我又看了好几个,但是都和上面说的差不多,都没有帮我解决问题。
我missing/not了解什么?我尝试过的任何方法都没有奏效,如果有任何帮助,我将不胜感激。
A friend
声明将指定 class 的访问权限授予声明 class 的私有成员(即,“class X 那边有一个朋友我的,他有权使用我的私人物品")。
因此,通过将 Node
声明为 LinkedList
内部的 friend
,您授予 Node
对 LinkedList
的私有成员的访问权,而不是反之亦然。
要让 LinkedList
访问 Node::next
,您需要将 LinkedList
声明为 Node
的 friend
:
class Node {
friend class LinkedList;
...
};