c++:一个类调用另一个类,出现未定义对象问题的解决(学习笔记)

最近写一些小的作业的时候出现的问题。问题大概如下

#include<iostream>
using namespace std;
class B;
class A {
public:
	//A中定义的类B对象
	B* obj;
	//初始化对象
	A() {
		obj = new B;
	}
	//访问类B中的成员
	void printB() {
		cout << "类B中的成员b=" << obj->b << endl;
	}
};
class B {
public:
	int b ;
	//给b初始化
	B() {
		b = 10;
	}
};
int main() {
	A a;
	a.printB();
	return 0;
}

 此时出现错误类B类型未定义

 

即使使用了向前定义依旧出错,问题原因:使用向前声明之后,在类定义之前,类是一个不完全类型(incompete type),即已知向前声明过的类是一个类型,但不知道包含哪些成员,所以在使用向前声明后,类定义前,只能定义指向该类型的指针及引用而不能使用该类成员。

所以做出修改,让所有函数都用类外调用,并且放在类的后面即可。

#include<iostream>
using namespace std;
class B;
class A {
public:
	//A中定义的类B对象
	B* obj;
	//初始化对象
	A();
	//访问类B中的成员
	void printB();
};
class B {
public:
	int b ;
	//给b初始化
	B();
};
//A类的类外调用
//初始化对象
A::A() {
	obj = new B;
}
//访问类B中的成员
void A::printB() {
	cout << "类B中的成员b=" << obj->b << endl;
}
//类B的类外调用
B::B() {
	b = 10;
}
int main() {
	A a;
	a.printB();
	return 0;
}

此外也可以采用单独编译的方法,具体可看下方博客。

参考博客:https://blog.csdn.net/qq_43915356/article/details/107577450

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值