我有个一按钮的响应函数,
它直接调用该响应函数所在的类的成员变量,
而没有通过对象调用,也编译成功,是怎么回事??void CSerialCommDlg::OnOpen() 
{
/*CComboBox *com=(CComboBox*)GetDlgItem(IDC_COMSELECT);          //获取串口号
int i=com->GetCurSel()+1;
CString scom;
scom.Format("%d",i);
scom="COM"+scom;*/
//设置该串口的波特率、奇偶校验等参数;
        if(m_theCommPort.Init (LPCSTR(scom),9600,0,1,8)==S_OK)         
{                                                          
m_bReady=TRUE;
}
m_theCommPort.Start ();}
m_bReady是CSerialCommDlg的成员变量。他没有通过对象调用

解决方案 »

  1.   


    在类的成员函数中可以直接使用,相当于 this->m_bReady
      

  2.   

    类的成员函数(非静态)的,都有个隐含参数this
      

  3.   

    但是m_bReady还没在内存里分配空间啊,怎末对他进行操作??this也是指向你所创建的对象的呀!!!
      

  4.   

    因为每个成员函数都默认包涵一个this指针,而this指针就是指向当前CSerialCommDlg对象的所以m_bReady=TRUE;  实际上是this->m_bReady=TRUE;   //只是省掉了而已
     
      

  5.   

    但是m_bReady还没在内存里分配空间啊
    ===========================
    你一执行不就有了这个类的对象了,有对象一定会调用构造函数,当然会初始化.在类的函数中引用类成员一般都是这样用的,难道还有别的用法.
      

  6.   


    如果你的是dlg程序,在app类的初始化函数已经创建了CSerialCommDlg的对象
      

  7.   


    是不是theApp全局对象???好像有点道理
      

  8.   

    //是不是theApp全局对象???
    不是theApp是App类的对象在App的InitInstance()函数中有下面这样的代码:CSerialCommDlg dlg;  //创建CSerialCommDlg对象
    m_pMainWnd = &dlg;
    int nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    {
        // TODO: Place code here to handle when the dialog is
        //  dismissed with OK
    }
    else if (nResponse == IDCANCEL)
    {
        // TODO: Place code here to handle when the dialog is
        //  dismissed with Cancel
    }