【问题标题】:Accessing a private struct LinkedList in another Class via function;通过函数访问另一个类中的私有结构 LinkedList;
【发布时间】: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();

标签: c++ class struct linked-list


【解决方案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 在这种情况下引用。祝你好运。
猜你喜欢
  • 2018-02-19
  • 2014-01-02
  • 1970-01-01
  • 2021-03-26
  • 2014-09-05
  • 1970-01-01
  • 2011-02-14
  • 2015-04-04
  • 2016-01-25
相关资源
最近更新 更多