我在网上看了一个简单的聊天程序,他的服务端建立了一个对话框的MFC工程叫Tcp。自己定义了一个监听类
class Listening : public CSocket
{
public:
Listening();
Listening(CTcpDlg *pdlg);
CTcpDlg *m_dlg;
virtual ~Listening();
virtual void OnAccept( int nErrorCode );
}
OnAccept我是这么写的
void Listening::OnAccept(int nErrorCode)
{

if(nErrorCode!=0)
{
AfxMessageBox("cannot accept listen");
return;
}
else
{
m_dlg->AcceptConnect();//AcceptConnect()是CTcpDlg中自己写的函数
}
CSocket::OnAccept(nErrorCode);

}AcceptConnect()我是这么写的
void CTcpDlg::AcceptConnect()
{
   m_pSocket=new Client(this);
   if(!m_pSocket->Accept(*pSocket))
   {
   AfxMessageBox("cannot accept connect") ;
   }
}
我想问的是m_pSocket=new Client(this)为什么一定要传this呢。我试了,如果不传this,虽然编译没问题。但是程序在这句话上走不过去。

解决方案 »

  1.   

    我想问的是m_pSocket=new   Client(this)是不是应该m_pSocket=new  Listening();呢?m_pSocket到底是什么类的对象呢?难道Client是由Listening派生的?
    如果你确定m_pSocket应该是Client的对象就去看Client类的构造函数定义吧。
      

  2.   

    那你仔细看
    Listening();
    Listening(CTcpDlg   *pdlg);
    这两个是怎么实现的
      

  3.   

    将对话框指针传递给socket对象,应该是用于显示值的吧...
      

  4.   

    OnAccept会用到CTcpDlg   *m_dlg; 
    所以应该在Listening构造的时候传入指针。
    如果不传,编译也不会出错,但运行的时候会发现m_dlg为空或者野指针!!