祝您愉快!我目前正在尝试创建一个数据库,该数据库需要我创建两个ADT。其中一个拥有私人在本例中创建的结构链表
问题是,我似乎无法访问或至少打印出来自另一个类的函数中结构内的值
这是我从最初的中得到的一个示例代码
#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,但我对如何访问没有任何线索或经验。如果能提供解决方案,我将不胜感激。
首先,类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();
}