在类中声明对象类型的问题

sdwalnut1 2006-02-15 05:16:09
定义了两个类
//a.h
class A
{
...
B m_b;
...
};
//b.h
class B
{
..
};
在类A中为了声明类B,可以通过下面两种方式:
方法一:
a.h中 在开头写
class B;
a.cpp中
#include "b.h"
方法二:
a.h中添加一行 #include "b.h"

我在使用方法一时,编译不通过,只能按照方法二声明。哪位高手知道使用方法一与方法二应用环境的差别。
...全文
144 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
armman 2006-02-15
  • 打赏
  • 举报
回复

上面说的对.
引用性说明所说明的类名不能用来建立对象,只能用来说明指针或者引用,或用在函数说明中.而定义性说明可以.
不完全声明的类不能实例化.
shenjonken 2006-02-15
  • 打赏
  • 举报
回复
------------a.h------------------------
#include "b.h"
#include <iostream>
using namespace std;
#ifndef _CLASSA_
#define _CLASSA_ 1

class B;

class A{
int i;
B m_b;
public:
A(int j = 0, B* m = new B(0)):i(j),m_b(*m){}

//~A(){delete m_b;}
void disp(){cout<<"class b ="<<m_b.getI()<<endl;}
};
#endif
--------------------b.h---------------------------
#ifndef _CLASSB_
#define _CLASSB_ 1

class B{
int i;
public:
B(int j = 0):i(j){}
int getI(){return i;}
};

#endif
-------------multi.cc-------------//测试程序
#include <iostream>
#include "a.h"
using namespace std;
class A;
int main()
{
A m_a;
m_a.disp();
int i;
cin>>i;
return 0;
}
以上程序测试通过
popy007 2006-02-15
  • 打赏
  • 举报
回复
B m_b;

对于这个声明来说,你必须完整定义B。才可以,所以再定义class A之前,你包含

b.h可行。

但是如果你使用class B;的声明方式,B m_b;的声明并没有看到所有B的定义。因此方法

一不可行。如果使用方法一,你只能使用指针B *m_pB。

对于一个类对象的定义,如果compiler没有见到完整的定义,而仅仅是一个简单的

声明的话,如class B;只能够定义一个它的指针B *pB!
healer_kx 2006-02-15
  • 打赏
  • 举报
回复
这样
a.h

class B;
class A
{
B* pB; //用指针。
};

要么呢,你就试着抽出一个基类什么的。
cenlmmx 2006-02-15
  • 打赏
  • 举报
回复
方法一只能
class B;
class A
{
...
B* m_b; //因为类B还没有完整定义,只有前向声明,而方法二就可以因为定义已经完整了
...
};
iamcaicainiao 2006-02-15
  • 打赏
  • 举报
回复
a.h中 在开头写
class B;
a.cpp中
#include "b.h"



这个a.cpp应该是这个吧#include "a.h"

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧