【问题标题】:cannot access private member in the same class无法访问同一类中的私有成员
【发布时间】:2023-06-24 02:08:01
【问题描述】:

我试图用私有结构声明一个公共成员函数,但它不起作用。有人可以帮我弄这个吗?这是头文件

class LinkedList
{
public:
   LinkedList();
   ~LinkedList();
   ...
   //I tried to add LinkedList also not working
   //void deleteNode(const LinkedList::Node* n);
   void deleteNode(const Node* n);

private:
    struct Node
    {
        std::string value;
        Node *next;
    };

【问题讨论】:

  • private: ... etc 部分移到同一类中公共部分的上方。完成此操作后,请仔细考虑应该如何向公共 deleteNode 函数提供指向他们一无所知的类型的指针(因为它是私有的)。简而言之,除非有一些看不见的朋友,这个模型并没有多大意义。
  • 谢谢你们,我没想到这个????
  • @WhozCraig 公开void deleteNode(const Node* n); 使LinkedList::Node - 从能够访问和使用LinkedList::Node 的角度来看 - 再次公开。

标签: c++ class struct private


【解决方案1】:
class LinkedList
{
public:
   LinkedList();
   ~LinkedList();

   void deleteNode(const Node* n);

private:
    struct Node
    {
        std::string value;
        Node *next;
    };
};

Nodevoid deleteNode(const Node* n); 之后声明,所以编译器不会知道Node 是什么。

你应该这样做:

class LinkedList
{
private:
    struct Node
    {
        std::string value;
        Node *next;
    };

public:
   LinkedList();
   ~LinkedList();

   void deleteNode(const Node* n);

};

【讨论】: