MFC聊天室:不允许指针指向不完整的类类型

这是MySocket.cpp代码

#include "stdafx.h"
#include "MySocket.h"
#include "talkc.h"
#include "talkcDlg.h"

// CMySocket

CMySocket::CMySocket()
{
    m_pDlg = NULL;
}

CMySocket::~CMySocket()
{
    m_pDlg = NULL;
}


// CMySocket 成员函数


void CMySocket::OnClose(int nErrorCode)
{
    // TODO: 在此添加专用代码和/或调用基类
    if (nErrorCode == 0) m_pDlg->OnClose(); 

    CAsyncSocket::OnClose(nErrorCode);
}


void CMySocket::OnConnect(int nErrorCode)
{
    // TODO: 在此添加专用代码和/或调用基类
    if (nErrorCode == 0) m_pDlg->OnConnect();

    CAsyncSocket::OnConnect(nErrorCode);
}


void CMySocket::OnReceive(int nErrorCode)
{
    // TODO: 在此添加专用代码和/或调用基类
    if (nErrorCode == 0) m_pDlg->OnReceive();

    CAsyncSocket::OnReceive(nErrorCode);
}


void CMySocket::SetParent(CTalkcDlg *pDlg)
{
    m_pDlg = pDlg;
}

# 这是头文件代码

// talkcDlg.h : 头文件
//

#pragma once
#include "afxwin.h"
#include "MySocket.h"
#include "talkcDlg.h"



// CtalkcDlg 对话框
class CtalkcDlg : public CDialogEx
{
// 构造
public:
    CtalkcDlg(CWnd* pParent = NULL);    // 标准构造函数

// 对话框数据
#ifdef AFX_DESIGN_TIME
    enum { IDD = IDD_TALKC_DIALOG };
#endif

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持


// 实现
protected:
    HICON m_hIcon;

    // 生成的消息映射函数
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    DECLARE_MESSAGE_MAP()
public:
    afx_msg void OnEnChangeEdit1();
    CButton m_btnConnect;
    CString m_strServName;
    int m_nServPort;
    CString m_strMsg;
    CListBox m_listSent;
    CListBox m_listReceived;
    afx_msg void OnButtonClose();
    afx_msg void OnButtonConnect();
    afx_msg void OnSendMsg();
public:
    CMySocket m_sConnectSocket;
    void OnClose();
    void OnConnect();
    void OnReceive();
};

图片说明

https://blog.csdn.net/qq_34911636/article/details/90256337

void OnConnect();这个函数的返回值是一个通用类型,你应该用同类型的指针去指