通过函数访问另一个类中的私有结构 LinkedList;

Posted

技术标签:

【中文标题】通过函数访问另一个类中的私有结构 LinkedList;【英文标题】:Accessing a private struct LinkedList in another Class via function; 【发布时间】:2021-06-29 10:47:35 【问题描述】:

美好的一天! 我目前正在尝试创建一个需要我创建两个 ADT 的数据库。其中一个有一个私人 本例中创建的 structlinkedlist

问题是我似乎无法在另一个类的函数中访问或至少打印出我的结构中的值

这是我从原始代码中导出的示例代码

#include <iostream>

using namespace std;
class A;
class B;
class A
    private:
        struct Node
            int var1;
            struct Node *next;
        ;
        Node *head = NULL;
        int var1 = 10;
        friend class B;
    public:     
        void CNode();
        
;

void A::CNode()
    Node *CPtr, *NewNode;
    NewNode = new Node; 
    NewNode -> var1 = var1;
    NewNode -> next = NULL;
    if(!head)
        head = NewNode;
    
    else
        CPtr = head;
        while(CPtr->next)
            CPtr = CPtr->next;
        
        CPtr->next = NewNode;
    
    CPtr = head;
    while(CPtr)
        cout << "Class A: " << CPtr -> var1 << endl <<endl;
        cout << CPtr -> next;
        break;
    


class B
    A c;
    public:
        void Display();
;

void B::Display()
    //Problem lies here I think
    A::Node *CPtr;
    CPtr = c.head;
    cout << "Class B Integration: " << CPtr -> var1 << endl;


int main()

    A a;
    B b;
    a.CNode();
    b.Display();

问题在于Display()。如您所见,我正在尝试在另一个类中访问我的私有结构 LinkedList ,但我对如何做到这一点一无所知。如果有解决方案,我将不胜感激。

【问题讨论】:

您是否遇到编译错误?这是什么? 崩溃是因为CPtr == NULL这里:cout &lt;&lt; "Class B Integration: " &lt;&lt; CPtr-&gt;var1 &lt;&lt; endl;ab是不同的对象,所以a.CNode();不会改变b中的变量。也许你想要b.c.CNode(); 【参考方案1】:

首先,B 类中的属性c 是私有的。 B 类中没有地方可以放置该值。所以我添加了一个构造函数,它引用了一个 A 的实例。

你做错了什么:c 总是有一个空指针。现在谈谈原始引用和指针。始终检查 nullptr。否则,您将获得未定义的行为,例如什么都不显示

class B

    A& c;

public:
    B(A& c_) : c(c_);
    void Display();
;

void B::Display()

    //Problem lies here I think
    A::Node *CPtr;
    CPtr = c.head;
    if (CPtr != nullptr)
    
        cout << "Class B Integration: " << CPtr->var1 << endl;
     else 
        cout << "Class B's A attribute is null" << endl; 
    


int main()

    A a;
    B b(a);
    a.CNode();
    b.Display();

【讨论】:

@Zeok。了解参考资料可能会更好。 @Zeok 在这种情况下引用。祝你好运。

以上是关于通过函数访问另一个类中的私有结构 LinkedList;的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在打字稿中访问另一个类中的私有变量吗

我们可以在打字稿中访问另一个类中的私有变量吗

友元

面向对象之成员修饰符

访问同一类中另一个对象的私有字段

c++友元