不同类之间的变量传递!!!
我在对话框类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




