技术难题:两类互为成员变量

caigzhi 2001-12-14 03:02:00
如果我一定要显式的定义如下两类,如何解决
class CA
{
CB m_b;
};


class CB
{
CA m_a;
};

不管用template还是其他方法,都可以,
但是不能模糊成员变量的类型,比如用指针或偏移
...全文
200 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
TigerHu 2001-12-14
  • 打赏
  • 举报
回复
// CA.h
class CB;
class CA
{
class CB* m_b; // Modfied
};
// CB.h
class CA;
class CB
{
class CA* m_a; // Modified!!!!!!!!!!!!!!!!!!!!!!!!!
};

// CA.cpp
#include "cb.h"
// CB.cpp
#include "ca.h"
caigzhi 2001-12-14
  • 打赏
  • 举报
回复
我想过了,我的想法逻辑上不可能,实现更不可能,这是一个母鸡和鸡蛋的问题,编译器总要找一个起始点,所以至少要有一个是reference.以下是我的一个内嵌类解决方案.

template <class T>class CA
{
public:
T m_t;
};

class CB
{
public:
CA<CB> *m_a;
};


int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
CA<CB> a;
a.m_t.m_a = &a;
return 0;
}
caigzhi 2001-12-14
  • 打赏
  • 举报
回复
supperapplication(行星):请看清楚问题再发言
supperapplication 2001-12-14
  • 打赏
  • 举报
回复
这个问题问什么总是有人问?用extern 很容易就解决了。
caigzhi 2001-12-14
  • 打赏
  • 举报
回复
其实我觉得在一个文件实现代码如果不行,多文件的办法也不行。
caigzhi 2001-12-14
  • 打赏
  • 举报
回复
xiaoxiaohan(萧晓寒):上述代码编译肯定还是通不过,一样的道理:
你用CA.h里若不#include "CB.h",如何去用CB* m_b?
CB同理
Kummer 2001-12-14
  • 打赏
  • 举报
回复
不过如果里面的两个成员变量都是static,就可以了
而且,你甚至可以这样
class CA{
static CA m_myself;
};
不过此时CA实际上是个空的,可能这个结果不是你想要的
Kummer 2001-12-14
  • 打赏
  • 举报
回复
我试过了,不能通过,
其实你想想,他的内存怎么分配
kingfish 2001-12-14
  • 打赏
  • 举报
回复
佩服!
TigerHu 2001-12-14
  • 打赏
  • 举报
回复
可以通过!
class CA;// 是前向引用!
xiaoxiaohan 2001-12-14
  • 打赏
  • 举报
回复
你可以试一试,应改为:
// CA.h
class CB;
class CA
{
CB* m_b;
};
// CB.h
class CA;
class CB
{
CA* m_a;
};

// CA.cpp
#include "cb.h"
// CB.cpp
#include "ca.h"
caigzhi 2001-12-14
  • 打赏
  • 举报
回复
xiaoxiaohan(萧晓寒):上述代码编译肯定通不过,
你用CA.h里若不#include "CB.h",如何去用CB m_b?
CB同理
xiaoxiaohan 2001-12-14
  • 打赏
  • 举报
回复
例:
// CA.h
class CB;
class CA
{
CB m_b;
};
// CB.h
class CA;
class CB
{
CA m_a;
};

// CA.cpp
#include "cb.h"
// CB.cpp
#include "ca.h"

16,548

社区成员

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

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

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