读书人

急求解决这个有关问题:illegal refer

发布时间: 2012-02-23 22:01:34 作者: rapoo

急求解决这个问题:illegal reference to data member 'CM_TestDlg::m_intNum' in a static member function
弄了好长时间一直出错,就是程序编译没有问题,但运行后就提示“遇到问题需要关闭”,但尝试着修改也不行,只好拿到这里来让各位老师给看下了,先谢了!
我的程序是这样的:


#define StartSimuThreadMSG WM_USER+110

class CM_TestDlg : public CDialog
{
// Construction
public:
//查询线程创建
static UINT IntCheckThread(void *param);
CWinThread *pCheckThread;

//仿真线程创建
static UINT SimulinkThread(void *param);
CWinThread *pWorkSimulinkThread;

void ShowInfo(CString str);//显示

// Dialog Data
//{{AFX_DATA(CM_TestDlg)
enum { IDD = IDD_M_TEST_DIALOG };
CListBoxm_ListShow;
...
DWORDm_intNum;//m_intNum为编辑框控件关联的变量
//}}AFX_DATA

...
protected:
// Generated message map functions
//{{AFX_MSG(CM_TestDlg)
...

afx_msg void OnStartSimuThread(WPARAM wParam,LPARAM lParam);//消息定义

//}}AFX_MSG
DECLARE_MESSAGE_MAP()
...
}

BEGIN_MESSAGE_MAP(CM_TestDlg, CDialog)
//{{AFX_MSG_MAP(CM_TestDlg)
...
ON_MESSAGE(StartSimuThreadMSG,OnStartSimuThread) //消息映射

//}}AFX_MSG_MAP
END_MESSAGE_MAP()


void CM_TestDlg::OnStart()
{
...
//-------创建事件查询线程-------//
pCheckThread=AfxBeginThread(IntCheckThread,this,THREAD_PRIORITY_HIGHEST);
...

}

//------查询线程函数---------//
UINT CM_TestDlg::IntCheckThread(void *param)
{
CM_TestDlg *dlg=(CM_TestDlg *) param;
dlg-> GetParent();

if(bThreadflag)
{
//---------开辟仿真线程--------//
AfxGetMainWnd()-> SendMessage(StartSimuThreadMSG,0,0);
}
...
return 0;
}

//-------创建线程-----//
void CM_TestDlg::OnStartSimuThread(WPARAM wParam,LPARAM lParam)
{
//创建挂起线程SimulinkThread
pWorkSimulinkThread=AfxBeginThread(SimulinkThread,0,THREAD_PRIORITY_HIGHEST-

1,0,CREATE_SUSPENDED,NULL);

pWorkSimulinkThread-> ResumeThread();
}

//-------线程函数----//
UINT CM_TestDlg::SimulinkThread(void *param)
{
AfxMessageBox( "仿真线程启动 ",MB_OK);

CM_TestDlg *dlg=(CM_TestDlg *) param;
dlg-> GetParent(); //貌似有问题

CString str;

str.Format( "%d ",dlg-> m_intNum++);
dlg-> ShowInfo(str);

return 0;
}

//--------显示--------//
void CM_TestDlg::ShowInfo(CString str)
{
m_ListShow.InsertString(m_ListShow.GetCount(),str);

//str为被插入的内容指针
m_ListShow.SetCurSel(m_ListShow.GetCount()-1);
//m_ListShow是为ListBox控件关联的变量
return;
}

请问为什么程序总是运行后出错要求关闭呢?该怎么解决呢?

非常感谢!




[解决办法]
//创建挂起线程SimulinkThread
pWorkSimulinkThread=AfxBeginThread(SimulinkThread,0,THREAD_PRIORITY_HIGHEST-

1,0,CREATE_SUSPENDED,NULL);

第二个参数应该是this吧

读书人网 >VC/MFC

热点推荐