CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

基础知识,送分题

楼主gpmn(冷血动物)2002-02-01 13:23:33 在 VC/MFC / 基础类 提问

帮忙看看;  
  我定义了类A,B,LIKE   THIS:  
  class   A  
  {  
        B   b;  
  }  
   
  class   B  
  {  
        A   a:  
  }  
   
  怎么才能让它编译通过?用什么与预编译命令?还是.......  
  记得学过,忘了,不好意思; 问题点数:65、回复次数:29Top

1 楼solar(天哪,忘了我是什么时候注册的了!)(int argc, char *argv[])回复于 2002-02-01 13:25:50 得分 0

不可能通过的Top

2 楼solar(天哪,忘了我是什么时候注册的了!)(int argc, char *argv[])回复于 2002-02-01 13:26:58 得分 3

除非  
  class   B  
  {  
      A*   a:  
  }  
   
  或  
   
  class   A  
  {  
      B   b;  
  }  
  Top

3 楼mensong(吉他乐手)回复于 2002-02-01 13:27:28 得分 1

这种问题你怎么想出来的?Top

4 楼solar(天哪,忘了我是什么时候注册的了!)(int argc, char *argv[])回复于 2002-02-01 13:27:35 得分 0

除非  
  class   B  
  {  
      A*   a:  
  }  
   
  和/或  
   
  class   A  
  {  
      B   *b;  
  }  
  Top

5 楼gpmn(冷血动物)回复于 2002-02-01 13:28:30 得分 0

绝对可以,学c语言时我记得有方法;Top

6 楼gpmn(冷血动物)回复于 2002-02-01 13:29:20 得分 0

我现在碰到了,当然就想到了,呵呵,qq,15938453,欢迎讨论Top

7 楼thd111(小蛐蛐)回复于 2002-02-01 13:30:03 得分 1

有错误么,哈哈   Top

8 楼solar(天哪,忘了我是什么时候注册的了!)(int argc, char *argv[])回复于 2002-02-01 13:30:29 得分 0

绝对不可以,除非编译器有BugTop

9 楼gpmn(冷血动物)回复于 2002-02-01 13:32:28 得分 0

我定义的两个类,相互都以对方的指针作为成员变量,手边没书,哪个老大帮忙翻翻书Top

10 楼solar(天哪,忘了我是什么时候注册的了!)(int argc, char *argv[])回复于 2002-02-01 13:32:36 得分 0

C/C++不可能的,倒是delphi/pascal可以Top

11 楼jeffchen(Jeff)回复于 2002-02-01 13:32:39 得分 30

使用超前声明  
  classA.h  
   
  class   B;  
   
  class   A  
  {  
  ...  
  }  
   
  ClassA.cpp  
  #include   "ClassA.h"  
  #include   "ClassB.h"  
   
  ClassB.h  
  class   A;  
   
  class   B  
  {  
  ...  
  }  
   
  同样ClassB.cpp也要包含ClassA.h  
   
  Top

12 楼musicbug()回复于 2002-02-01 13:33:33 得分 0

不可能编译通过,因为无穷递归.会占用无穷的空间.Top

13 楼jeffchen(Jeff)回复于 2002-02-01 13:34:00 得分 0

不会的不要说不行!!Top

14 楼gpmn(冷血动物)回复于 2002-02-01 13:34:20 得分 0

我的类都很小,因此定义在一个头文件里面,也可以搞定吗?楼上的jeffchen?Top

15 楼gpmn(冷血动物)回复于 2002-02-01 13:36:36 得分 0

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;  
  }  
  }  
  Top

16 楼solar(天哪,忘了我是什么时候注册的了!)(int argc, char *argv[])回复于 2002-02-01 13:37:21 得分 0

绝对不行!不是我不会,是C/C++标准不允许!Top

17 楼gpmn(冷血动物)回复于 2002-02-01 13:40:55 得分 0

学过编译的话,应该知道这不是问题,编译器很容易解决这种形式的递归问题;  
  因为我定义的是指针,可以预先知道大小的;如果真的用的是类变量的话肯定如solar兄所说了Top

18 楼jeffchen(Jeff)回复于 2002-02-01 14:02:04 得分 0

可以在同一个头文件里,但所有的class   XXX;都要放到前面。  
  如:  
  class   A;  
  class   B;  
   
  class   A  
  {  
  ...  
  };  
   
  class   B  
  {  
  ...  
  };  
   
  不会的不要说不行!!!!  
   
  Top

19 楼gpmn(冷血动物)回复于 2002-02-01 14:04:14 得分 0

这样,我把我的问题改一下,全部成了指针成员变量;  
  class   A  
  {  
      B*   b;  
  }  
   
  class   B  
  {  
      A*   a:  
  }  
  文档视图模型里面我用基类躲开了这个问题,但躲得了初一躲不了十五,大家一起看看Top

20 楼jeffchen(Jeff)回复于 2002-02-01 14:07:32 得分 0

呵呵…………躲是躲不掉的Top

21 楼gpmn(冷血动物)回复于 2002-02-01 14:25:41 得分 0

还是没搞定;  
  互用指针绝对可以,只是怎么用啊?  
   
  jeffchen兄,还是没搞定;  
   
  msdn上的代码:  
  //   defining_class_types.cpp  
  class   Tree  
  {  
  public:  
          void   *Data;  
          Tree   *Left;  
          Tree   *Right;  
  };  
   
  int   main()  
  {  
  }  
  递归肯定是可以的  
   
  Top

22 楼gpmn(冷血动物)回复于 2002-02-01 14:27:33 得分 0

不会逼我传void指针吧!sigh!!Top

23 楼solar(天哪,忘了我是什么时候注册的了!)(int argc, char *argv[])回复于 2002-02-01 15:03:37 得分 0

不必互用指针,只要有一个是指针就行了!  
   
  #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;  
  }  
  Top

24 楼gpmn(冷血动物)回复于 2002-02-01 15:06:49 得分 0

solar兄搞定了吗?我试一下;solar兄用的是vc6?我用的vc.net,刚才搞不定啊!Top

25 楼solar(天哪,忘了我是什么时候注册的了!)(int argc, char *argv[])回复于 2002-02-01 15:08:04 得分 30

vc6,gcc3.01Top

26 楼gpmn(冷血动物)回复于 2002-02-01 15:12:30 得分 0

昏了,我的代码肯定还有错,不是这里的问题;  
  solar兄的代码能通过;  
  我大概还是没记错哦,呵呵!  
   
  谢谢solar,jeffchen;散分,发压岁钱!Top

27 楼solar(天哪,忘了我是什么时候注册的了!)(int argc, char *argv[])回复于 2002-02-01 15:13:49 得分 0

这样也行:  
   
  #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;  
  }  
  Top

28 楼gpmn(冷血动物)回复于 2002-02-01 15:23:28 得分 0

找到问题了,fk!  
  我的类定义的最后没加";"气!!!!!!  
  刚刚考研完,4、5个月没摸过vc了,大家别笑!  
  搞定了真爽!  
  Top

29 楼liuyang_cn(爱我吧)回复于 2002-02-01 15:27:28 得分 0

如果要在一个文件里实现,第一的类中队第二个类的引用必须用指针.如:  
  class   B  
  {  
      A*   a:  
  }  
   
  和/或  
   
  class   A  
  {  
      B   *b;  
  }  
  应为类在分配空间时必须知道大小.Top

相关问题

  • 基础知识的问题
  • ASP的基础知识的问题
  • ASP的基础知识问题2
  • ASP的基础知识问题3
  • ASP的基础知识问题4
  • ASP的基础知识问题5
  • ASP的基础知识的问题6
  • ASP的基础知识问题7
  • ASP的基础知识的问题8
  • ASP的基础知识的问题9

关键词

  • c/c++
  • 指针
  • 编译
  • ca
  • 代码
  • pb
  • 文件
  • chessproc
  • stepinfo
  • chessmanager

得分解答快速导航

  • 帖主:gpmn
  • solar
  • mensong
  • thd111
  • jeffchen
  • solar

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo