出现场景:类内套娃,类A中定义另一个类B,并访问其属性
出错原因:类A的定义在类B之前,
出错代码:
class B;
class A
{
public:
B* b;
A() // 默认构造函数
{
b = new B; //为类b创建堆区内存
}
void visit()
{
cout << "A类正在访问B类中属性" << b->b_a; //类B此时还尚未定义,只给了声明
}
};
class B
{
public:
int b_a = 10;
int b_b = 20;
};
void test()
{
A a;
a.visit();
}
//主函数
int main()
{
test();
system("pause");
return 0;
}
解决办法:
1、改换AB类定义的位置
class B
{
public:
int b_a = 10;
int b_b = 20;
};
class A
{
public:
B* b;
A() // 默认构造函数
{
b = new B; //为类b创建堆区内存
}
void visit()
{
cout << "A类正在访问B类中属性" << b->b_a; //类B此时还尚未定义,只给了声明
}
};
2、类外定义函数(调用类B中属性的函数要写在类B定义的后面)
class B;
class A
{
public:
B* b;
A(); //类内声明
void visit(); //声明
};
class B
{
public:
int b_a = 10;
int b_b = 20;
};
A::A() //类外定义
{
b = new B;
}
void A::visit() // 类外写函数
{
cout << "A类正在访问B类中属性" << b->b_a;
}
void test()
{
A a;
a.visit();
}



