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

不同类之间的变量传递!!!

楼主junwangmail(军)2006-06-04 14:40:10 在 VC/MFC / 基础类 提问

我在对话框类Clogon   中的一个变量为a   (CString),  
  我想在另一个类中CCdraw   中调用变量a,  
  CCdraw::aaa()  
  {   CString   b;  
      Clogon   dlg;  
      b=dlg.a;  
  }  
   
  为什么得不到a的值呢?  
   
  //不能用全局变量  
   
  谢谢! 问题点数:60、回复次数:14Top

1 楼clever101(探索比到达更可贵)回复于 2006-06-04 14:46:55 得分 0

估计Clogon   dlg;  
            dlg.a;     //估计这里就a没有获取值吧  
   
  改为下面的试试:  
  Clogon   dlg;  
  dlg.DoModal();  
  UpdateData(TRUE);  
    b=dlg.a;    
   
   
  Top

2 楼syy64(太平洋)回复于 2006-06-04 15:00:01 得分 0

不能这么写,应该两个类之间互相声明对方类的指针,传指针的值。Top

3 楼gudulyn(冰楠)回复于 2006-06-04 15:16:36 得分 0

得不到a的值呢?  
  -----------------------------  
  a的值是什么?  
  搂主这样必须在构造函数中初始化a。  
   
  不能这么写,应该两个类之间互相声明对方类的指针,传指针的值。  
  ------------------------------------------------------------  
  不用吧。我好像就这样用过,没有问题。Top

4 楼soaroc(会飞的猪)回复于 2006-06-04 15:26:53 得分 0

同意楼上的建议,你的a是不是邦定的变量,如果是,在取出来之前需要使用UpdateData()来获取对应的值。Top

5 楼jxufeng(玉龙猪)回复于 2006-06-04 17:25:16 得分 10

在CCdraw类定义中,如此:  
  public:  
  //friend   class   Clogon;  
  Clogon*   dlg;  
  然后改:  
  CCdraw::aaa()  
  {   CString   b;  
     
      b=dlg->a;  
  }  
  最后,那里定义了Clogon,例如在  
  ccdraw::oninitdialog()  
  {  
            Clogon   dlg1;  
            dlg=&dlg1;  
          dlg.DoModal();  
  }  
  差不多就行了,如果两个对话框相互利用,当时相互包含头文件时会告诉你冲突,就用友元声明一下(文中注释的部分)。上面就是所谓的c++类、对象、实例、指针、引用的用法,恶心Top

6 楼junwangmail(军)回复于 2006-06-04 22:31:16 得分 0

谢谢大家  
  但是我不想执行Domodal();因为这样的话,弹出了1个对话框,不想要对话框!!!Top

7 楼clever101(探索比到达更可贵)回复于 2006-06-04 23:21:27 得分 10

不想执行Domodal();  
   
  那你的dlg.a的数据是怎么来的。Top

8 楼junwangmail(军)回复于 2006-06-04 23:22:21 得分 0

在另外一个类中执行的!!Top

9 楼junwangmail(军)回复于 2006-06-04 23:30:53 得分 0

是这样的,  
  1。先执行CClogon   类(输入用户名,密码,),  
  2。然后,调出一个类aa对话框,此时这个对话框已经调用了CClogon类的一个变量(eg   ;a);  
  3.   第三,在类aa对话框上,调用第3个对话框(bb),此时bb,需要a   的值!!  
  表达得也不知道清楚不清楚!!  
  惭愧!Top

10 楼abuseyoudna1981()回复于 2006-06-05 09:25:24 得分 10

1根据你第一步,应该CClogon就是一个对话框  
  2可以把你CClogon那个变量传给类aa对话框,方法的话.我觉得可以用构造函数,在类aa对话框显示之前.  
  3道理和上面一样.Top

11 楼clever101(探索比到达更可贵)回复于 2006-06-05 13:35:35 得分 0

这样你可以设一个全局变量进行交换。或者通过获取CClogon   类的指针应该也可以。Top

12 楼seu07201213(【_】〖汪洋中的一片叶子〗≈^︵^≈)回复于 2006-06-05 14:05:26 得分 20

CCdraw::aaa()  
  {   CString   b;  
      Clogon   dlg;  
      b=dlg.a;  
  }  
  为什么得不到a的值呢?  
  =========================  
  当然得不到了,你现在的dlg是新定义的登陆对话框,非刚才的登陆对话框,刚才的登陆框已经不存在,里面的a也随之灰飞湮灭。  
  如果不用全局变量,可以在类aa对话框定义成员变量a来中转。Top

13 楼pandera(一条自在的鱼)回复于 2006-06-05 14:29:12 得分 10

CCdraw::aaa()  
  {   CString   b;  
  Clogon   dlg;  
  b=dlg.a;  
  }  
   
  如果没有调用Domodal(),其中a仅被初始化,b就等于a的初始值,  
  看看你Clogon的构造函数,就应该能问题在哪里了。  
  Top

14 楼junwangmail(军)回复于 2006-06-05 20:53:46 得分 0

谢谢大家,我明白了!Top

相关问题

关键词

得分解答快速导航

  • 帖主:junwangmail
  • jxufeng
  • clever101
  • abuseyoudna1981
  • seu07201213
  • pandera

相关链接

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

广告也精彩

反馈

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