如何正常使用前项申明类的成员

c++允许类的前项申明,但要求申明在其他未完成定义前只能作为引用或者指针使用。

想必大家都会遇到一个这样的问题:

我有两个类,他们需要互相使用对方的成员?

理所当然的大家会想到其中一个类前项申明一下就完了,但实际操作时就会遇到问题。类在未完成定义前不允许使用其成员函数,只能作为指针或引用使用,这样就限制了我们的实际操作。

如下

#include<iostream>
using namespace std;
class A;

class B{
	public:
	  B(){
	  }
	 void callA(A& a){
	  a.call();
     }
}; 

class A{
	public:
		A(){
			cout<<"A is creat"<<endl;
		}
		void call(){
			cout<<"A is call"<<endl;
		}
};


int main(){
	A a;
	B b;
	b.callA(a);
	return 0;
}
[Error] invalid use of incomplete type 'class A'
[Error] forward declaration of 'class A'

dev上是这样的报错

为解决这个问题,我们其实可以使用类外定义成员函数的办法解决。具体操作是:将 使用到前项申明类成员的 成员函数放置到前项申明类的完整定义的下方。

这样的做法可以使得 使用到前项申明类成员的 成员函数在编译时,前项申明类已经完成定义并编译,故可以正常编译执行。

代码如下

#include<iostream>
using namespace std;
class A;

class B{
	public:
	  B(){
	  }
	 void callA(A& a);
}; 

class A{
	public:
		A(){
			cout<<"A is creat"<<endl;
		}
		void call(){
			cout<<"A is call"<<endl;
		}
};

void B::callA(A& a){
	a.call();
}

int main(){
	A a;
	B b;
	b.callA(a);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值