当前位置: 代码迷 >> VC/MFC >> vc中为什么无法操作public成员变量以及成员函数
  详细解决方案

vc中为什么无法操作public成员变量以及成员函数

热度:168   发布时间:2016-05-02 03:38:11.0
vc中为何无法操作public成员变量以及成员函数
IDE是vs2010

头文件中包含如下信息:

DWORD WINAPI MyThreadProc1(LPVOID lpParameter);
DWORD WINAPI MyThreadProc2(LPVOID lpParameter);

// CC2_DownloaderDlg dialog
class CC2_DownloaderDlg : public CDialogEx
{
// Construction
public:
CC2_DownloaderDlg(CWnd* pParent = NULL); // standard constructor

// Dialog Data
enum { IDD = IDD_C2_DOWNLOADER_DIALOG };

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


// Implementation
protected:
HICON m_hIcon;

// Generated message map functions
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 OnBnClickedButton1();

CListBox l_list;
afx_msg void OnBnClickedButton2();
CEdit Edit1;
CEdit Edit2;
CEdit Edit3;

afx_msg void OnBnClickedRadio13();
afx_msg void OnBnClickedRadio14();
afx_msg void OnBnClickedRadio15();
afx_msg void OnTimer(UINT_PTR nIDEvent);

    afx_msg unsigned char Download(unsigned char );

CButton Button2;
// CControlStatic m_static1;
// CControlStatic m_static2;

CListBox m_list;
};

发现cpp文件中线程函数无法操作class CC2_DownloaderDlg中的public成员啊,public不是类的接口么,为何不能访问。vs还是用不习惯啊~
------解决思路----------------------

DWORD WINAPI MyThreadProc1(LPVOID lpParameter)
{
CC2_DownloaderDlg *pDlg = (CC2_DownloaderDlg *)lpParameter;
if(pDlg)
pDlg->xxoo;
//.....
return 0;
}

------解决思路----------------------
1.子线程函数要想访问类的成员函数/成员变量,那么该成员函数/成员变量必须声明为静态static。仅public是不够的,语法问题。
2.如果想把线程函数也申明在类中的话(即作为类成员),那么线程函数应该声明为静态
static UINT MyThreadProc1(LPVOID lpParameter);
------解决思路----------------------
引用:
之所以不可以,是你用的不对啊
MyThreadProc1 和 MyThreadProc2 这两个函数又不是CC2_DownloaderDlg类的成员函数,当然不能访问了


MyThreadProc1 和 MyThreadProc2 这两个函数即使是CC2_DownloaderDlg类的成员函数也不能访问,
线程函数必须是静态的
  相关解决方案