基础知识,送分题

gpmn 2002-02-01 01:23:33
帮忙看看;
我定义了类A,B,LIKE THIS:
class A
{
B b;
}

class B
{
A a:
}

怎么才能让它编译通过?用什么与预编译命令?还是.......
记得学过,忘了,不好意思;
...全文
305 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuyang_cn 2002-02-01
  • 打赏
  • 举报
回复
如果要在一个文件里实现,第一的类中队第二个类的引用必须用指针.如:
class B
{
A* a:
}

和/或

class A
{
B *b;
}
应为类在分配空间时必须知道大小.
gpmn 2002-02-01
  • 打赏
  • 举报
回复
找到问题了,fk!
我的类定义的最后没加";"气!!!!!!
刚刚考研完,4、5个月没摸过vc了,大家别笑!
搞定了真爽!
solar 2002-02-01
  • 打赏
  • 举报
回复
这样也行:

#include <iostream>
using namespace std;

class CA;
class CB;

class CA
{
public:
CB* m_pb;
};

class CB
{
public:
CA m_a;
};

int main(int argc,char *argv[])
{
CA a;
CB b;
a.m_pb = &b;
b.m_a = a;
return 0;
}
gpmn 2002-02-01
  • 打赏
  • 举报
回复
昏了,我的代码肯定还有错,不是这里的问题;
solar兄的代码能通过;
我大概还是没记错哦,呵呵!

谢谢solar,jeffchen;散分,发压岁钱!
solar 2002-02-01
  • 打赏
  • 举报
回复
vc6,gcc3.01
gpmn 2002-02-01
  • 打赏
  • 举报
回复
solar兄搞定了吗?我试一下;solar兄用的是vc6?我用的vc.net,刚才搞不定啊!
solar 2002-02-01
  • 打赏
  • 举报
回复
不必互用指针,只要有一个是指针就行了!

#include <iostream>
using namespace std;

class CA;
class CB;

class CA
{
public:
CB* m_pb;
};

class CB
{
public:
CA* m_pa;
};

int main(int argc,char *argv[])
{
CA a;
CB b;
a.m_pb = &b;
b.m_pa = &a;
return 0;
}
gpmn 2002-02-01
  • 打赏
  • 举报
回复
不会逼我传void指针吧!sigh!!
gpmn 2002-02-01
  • 打赏
  • 举报
回复
还是没搞定;
互用指针绝对可以,只是怎么用啊?

jeffchen兄,还是没搞定;

msdn上的代码:
// defining_class_types.cpp
class Tree
{
public:
void *Data;
Tree *Left;
Tree *Right;
};

int main()
{
}
递归肯定是可以的

jeffchen 2002-02-01
  • 打赏
  • 举报
回复
呵呵…………躲是躲不掉的
gpmn 2002-02-01
  • 打赏
  • 举报
回复
这样,我把我的问题改一下,全部成了指针成员变量;
class A
{
B* b;
}

class B
{
A* a:
}
文档视图模型里面我用基类躲开了这个问题,但躲得了初一躲不了十五,大家一起看看
jeffchen 2002-02-01
  • 打赏
  • 举报
回复
可以在同一个头文件里,但所有的class XXX;都要放到前面。
如:
class A;
class B;

class A
{
...
};

class B
{
...
};

不会的不要说不行!!!!

gpmn 2002-02-01
  • 打赏
  • 举报
回复
学过编译的话,应该知道这不是问题,编译器很容易解决这种形式的递归问题;
因为我定义的是指针,可以预先知道大小的;如果真的用的是类变量的话肯定如solar兄所说了
solar 2002-02-01
  • 打赏
  • 举报
回复
绝对不行!不是我不会,是C/C++标准不允许!
gpmn 2002-02-01
  • 打赏
  • 举报
回复
e:\gp's project\chessmanager\chessmanager\DataDef.h(23): error C2079: 'ChessProc::mSteps' uses undefined struct 'StepInfo'

e:\gp's project\chessmanager\chessmanager\DataDef.h(38): error C2159: more than one storage class specified

struct StepInfo;

typedef struct ChessProc //一个参考图对应一个棋程;联合起来构成全部一个棋谱;
{
StepInfo* pParent_StepInfo; //指向被参考的那一步;如果有的话;
ChessProc* pBrother_ChessProc; //同一被参考的落子的下一个参考图;如果有的话;
StepInfo mSteps[450]; //由每一步组成的该棋程的数组;
int nBeginOrder,nEndOrder; //起手和结手的编号;
CString mStrProcRemark; //对本图的评论;

ChessProc()
{
pParent_StepInfo = NULL;
pBrother_ChessProc = NULL;
nBeginOrder = 0;
nEndOrder = 0;
}
}

///////////////////////////////////////////////////////////////////////////////////////////////

typedef struct StepInfo //每一手棋的相关信息;
{
//variables;
short nOrder,nXpos,nYpos; //手数,横纵坐标;
Chessman chessman; //本手是黑是白还是空;
ChessProc* pChild_ChessProc; //对本手的参考图;
CString mStrStepRemark; //对本手的评论;

StepInfo()
{
nOrder=-1;
nXpos=-1;
nYpos=-1;
chessman=none;
}
}
gpmn 2002-02-01
  • 打赏
  • 举报
回复
我的类都很小,因此定义在一个头文件里面,也可以搞定吗?楼上的jeffchen?
jeffchen 2002-02-01
  • 打赏
  • 举报
回复
不会的不要说不行!!
musicbug 2002-02-01
  • 打赏
  • 举报
回复
不可能编译通过,因为无穷递归.会占用无穷的空间.
jeffchen 2002-02-01
  • 打赏
  • 举报
回复
使用超前声明
classA.h

class B;

class A
{
...
}

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

ClassB.h
class A;

class B
{
...
}

同样ClassB.cpp也要包含ClassA.h

solar 2002-02-01
  • 打赏
  • 举报
回复
C/C++不可能的,倒是delphi/pascal可以
加载更多回复(9)

16,551

社区成员

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

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

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