两个类可以互相保存对方的指针吗?好像很简单,结果发现好像做不到......大家来帮忙看看

magicing 2009-05-01 11:44:10
假如有两个类classA和classB,我想在classA中定义一个全局变量classB* pB指向classB,在classB中也定义一个全局变量classA* pA指向classA,结果法相好像造成了include死循环,因为在classA.h中需要include classB.h,而在classB.h中要include classA.h,而好像头文件是不能include自身的吧?这样classA.h在include classB.h之后等于又include了自己,我也是刚接触c不久,不清楚是不是这个原因,反正这样子编译器是通不过的,有什么方法可以达到我要的效果么?各位高手帮忙出个注意吧,谢了!
...全文
86 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜牛 2009-05-04
  • 打赏
  • 举报
回复
前置声明的作用,就是解决你这种需要相互包含的情况……
wutaihua 2009-05-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wutaihua 的回复:]
C/C++ code
在calssA的头文件中这么声明
#ifndef _CLASSA_H_
#define _CLASSA_H_
#endif
在classB的头文件中这么声明
#ifndef _CLASSB_H_
#define _CLASSB_H_
#endif

-------------------------------
楼主意思是实现A中存在B对象的指针,而在B中也可以访问A的指针,其实,这个问题只要是他们同时有一个公共类就可以了。
你可以声明一个类作为公共类.

//公共类的头文件
#ifndef _CPUBSHARE_H_
#define _CPUBSH…
[/Quote]

使用的时候,直接包含这个头文件,然后直接把this指针赋值过去。到时候对方调用的时候,就直接用接口,楼主多揣摩下吧
mengde007 2009-05-02
  • 打赏
  • 举报
回复
前置声明可以解决问题;
菜牛 2009-05-02
  • 打赏
  • 举报
回复
// classA.h

class classB; // 前置声明


class classA
{
classB* pB;
...
}
// classA.cpp
#include "classA.h"
#inlcude "classB.h"

// classB.h

class classA; // 前置声明

class classB
{
classA* pA;
}

// classB.cpp
#inlucde "classB.h"
#inlucde "classA.h"
magicing 2009-05-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 Mackz 的回复:]
C/C++ code// classA.h

class classB; // 前置声明


class classA
{
classB* pB;
...
}
// classA.cpp
#include "classA.h"
#inlcude "classB.h"

// classB.h

class classA; // 前置声明

class classB
{
classA* pA;
}

// classB.cpp
#inlucde "classB.h"
#inlucde "classA.h"
[/Quote]

试了一下还真的可以,这样我就不用多出一个类来专门保存指针了,本来我这两个类都从一个类继承,本来我的方法是定义父类的指针然后指向子类对象,得到了以后再强制转型,我也觉得这样好像麻烦了点,顺便想问下,这个前置申明的作用是什么呢?网上好像也查不太到资料,希望帮忙再解答下拉,多谢!
wutaihua 2009-05-01
  • 打赏
  • 举报
回复

在calssA的头文件中这么声明
#ifndef _CLASSA_H_
#define _CLASSA_H_
#endif
在classB的头文件中这么声明
#ifndef _CLASSB_H_
#define _CLASSB_H_
#endif

-------------------------------
楼主意思是实现A中存在B对象的指针,而在B中也可以访问A的指针,其实,这个问题只要是他们同时有一个公共类就可以了。
你可以声明一个类作为公共类.

//公共类的头文件
#ifndef _CPUBSHARE_H_
#define _CPUBSHARE_H_

#include "ClassA.h"
#include "ClassB.h"

#endif
Class CPubShare
{
ClassA *m_pA;
ClassB *m_pB;
}
extern CPubShare g_PubShare;

//公共类的.cpp文件

CPubShare g_PubShare

CPubShare::CPubShare()
{

}
BOOL CPubShare::SetPtrClassA(ClassA *PtrClassA)
{
....
m_pA = PtrClassA;
}

BOOL CPubShare::SetPtrClassB(ClassB *PtrClassB)
{
...
m_pB = PtrClassB;
}

ClassA* CPubShare::SetPtrClassA()
{
...
return PtrClassA;
}

classB* CPubShare::SetPtrClassB()
{
...
return PtrClassB;
}
HelloDan 2009-05-01
  • 打赏
  • 举报
回复
指针是可以的,提前声明一下就可以了。

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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