类成员函数无法访问同一类的私有结构节点?

Class member function unable to access a private struct node of the same class?

本文关键字:一类 节点 结构 函数 成员 访问      更新时间:2023-10-16

我正在做家庭作业,偶然发现了一个障碍

我创建了一个看起来像这样的链表类

List.h
class List{
struct Node{
string data
etc...
}
public:
Node* lastNode(Node* root);
List.cpp
#include "List.h"
List::Node* lastNode(Node* root){
while(root && root->next){
root = root->next;
}
return root;
}

当我尝试运行代码时,它在此上下文中显示"struct List::Node is private"(从 List.cpp 中 lastNode 的函数标头开始(

我不明白是什么原因造成的。我知道私有字段只能由同一类的成员函数访问,但 lastNode 不是成员函数吗?

List::Node* lastNode(Node* root) { ... }

定义一个名为lastNode全局函数,返回一个List::Node*。您想将其定义为List的成员函数。为此,您只需使用List::限定名称lastNode

List::Node *List::lastNode(Node *root) { ... } // * placement is more idiomatic this way

第二个List::,在函数名上,声明这个函数"属于"List,所以第二个Node,在它之后,不需要再次被List::限定。返回类型,因为它在最后一个节点上的List::之前,仍然在全局范围内解释,因此您需要对其进行限定。我认为除了历史惯性之外,没有任何充分的理由,这是编译器愚蠢到对此感到困惑时的遗留物。您还可以将返回类型放在限定函数名称之后,您可以在其中省略限定符:

auto List::lastNode(Node *root) -> Node* { ... }

戈博尔特