gpt4 book ai didi

c++ - 类成员函数无法访问同一类的私有(private)结构节点?

转载 作者:行者123 更新时间:2023-12-02 10:37:06 25 4
gpt4 key购买 nike

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

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

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 是私有(private)的”(从 List.cpp 中 lastNode 的函数头开始)

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

最佳答案

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

定义了一个名为 lastNode 的全局函数返回 List::Node* .您想将其定义为 List 的成员函数.为此,您只需限定名称 lastNodeList:: .
List::Node *List::lastNode(Node *root) { ... } // * placement is more idiomatic this way

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

Godbolt

关于c++ - 类成员函数无法访问同一类的私有(private)结构节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59815790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com