在对话框加了三个编辑控件,用ClassWazzard给它们添加了三个变量,分别是double m_a,double m_b,double m_c
然后在下面的代码中改变了初值  CTest2Dlg::CTest2Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CTest2Dlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTest2Dlg)
m_a = 111.0;
m_b = 2.0;
m_c = 41.11;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}接着在对话框类中加函数int CTest2Dlg::Value_L0(double m_a,double m_b,double m_c)
{
    int N =(int)(  ( m_a + m_b/60 + m_c/3600)/6  ) +1 ; //m_a,m_b,m_c分别是度、分、秒,类型强制转换
    int L0 = 6*N-3;
    return L0;
}
编译运行都没问题,可是就是值不对,我设置了断点,然后step over看了一下,N的值为1,L0的值为3,而正确的N应该是19,L0为111,说明m_a,m_b,m_c都没参加运算,是不是我的参数有问题?异或是别的什么问题?

解决方案 »

  1.   

    在Value_L0函数开始加上
    UpdataDate(TRUE)
      

  2.   

    把上面的初始化代码放到OnInitialDialog()里面试试,一般对话框程序的初始化都 在这个函数里的
      

  3.   

    一楼:我试了,不行没变化
    二楼:我的这个对话框类没这个OnInitialDialog()函数,可能是这个对话框是DoModal出来的原因吧
      

  4.   

    分析认为可能的问题在调用用函数:int CTest2Dlg::Value_L0(double m_a,double m_b,double m_c)
    时,没有使用如下形式:
    Value_L0(m_a,m_b,m_c);
      

  5.   

    同意楼上两位的说法,
    别外既然是成员变量可以把
    Value_L0(double m_a,double m_b,double m_c)
    直接变成
    Value_L0(void)
    不用再传形参了
      

  6.   

    我用vc2005试了一下,你代码都没有问题。
    我估计问题出在double m_a,double m_b,double m_c 。
    因为我的vc++2005中编辑框控件只支持CString类型,而不支持double,不知道你的vc6.0情况怎样。
    所以我项目中把三个编辑控件用CString m_a,CString m_b,CString m_c 关联后,可以得出正确的结果。
    你使用时把CString转换为double就可以了(atof(m_a))
    int N =(int)(  ( atof(m_a) + atof(m_b)/60 + atof(m_c)/3600)/6  ) +1