我在网上看了一个简单的聊天程序,他的服务端建立了一个对话框的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,虽然编译没问题。但是程序在这句话上走不过去。
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,虽然编译没问题。但是程序在这句话上走不过去。
如果你确定m_pSocket应该是Client的对象就去看Client类的构造函数定义吧。
Listening();
Listening(CTcpDlg *pdlg);
这两个是怎么实现的
所以应该在Listening构造的时候传入指针。
如果不传,编译也不会出错,但运行的时候会发现m_dlg为空或者野指针!!