指针类型强转求助!!

来源:百度知道 编辑:UC知道 时间:2024/06/01 22:11:05
我定义了一个void *m_pWnd

现在有一个函数void CPacket::Logon_pack(CLogonDlg *m_Wnd)

(CLogonDlg*) m_pWnd = m_Wnd
error C2106: '=' : left operand must be l-value

难道不能把void指针强转为其他类型的指针?????

(CLogonDlg*) m_pWnd = m_Wnd;
C里可以这样写, 有些C++编译器也允许这样写。VC++报错。
一般的指针类型强转是把等号右边的表达式强制转换为结果所需的类型(即等号左边变量的类型)。所以:
m_pWnd = (void *) m_Wnd;
m_Wnd = (CLogonDlg *) m_pWnd;
在任何C/C++编译器都不会报措(当然CLogonDlg需要正确说明)。
由于m_pWnd类型是void *, 所以下面这样写也是正确的:
m_pWnd = w_Wnd;
也就是说,任何指针变量类型无需强制类型转换即可直接赋值给void *类型.
但是反过来,void *类型需强制类型转换才可转换成其他指针变量类型:
m_Wnd = (CLogonDlg *) m_pWnd;