请大家帮我看看下面的问题:m_hWxWnd是一个HWND的公有变量。
在同一个函数里给m_hWxWnd赋值并接着使用是对的;如果赋值后在紧接着的子函数调用就出错了。-----------程序里面这样做是对的------------
         ...
HWND m_hRxWnd=pView->GetSafeHwnd();
        Func(m_test,m_hRxWnd);
        ...
-----------现在这样改,就不行了-------------
         ...
HWND m_hRxWnd=pView->GetSafeHwnd();
        SubFunc();
        ...
SubFunc的定义:
void SubFunc(void)
{
        Func(m_test,m_hRxWnd);
}-----------除非改成这样,由可以了:----------
         ...
HWND temp=pView->GetSafeHwnd();
        SubFunc(temp);
        ...
void SubFunc(HWND hWnd)
{
        Func(m_test,hWnd);
}为什么会出现以上的问题呢?m_hRxWnd作为一个类的公有变量应该在类的任何地方用都可以才对。!?
=================================================

解决方案 »

  1.   

    void SubFunc(void) ->void CView::SubFunc(void) 
      

  2.   

    HWND m_hRxWnd=pView->GetSafeHwnd(); 
    注意!!!这里的m_hRxWnd是一个与成员变量同名的临时变量。
    所以SubFunc(void)里面的m_hRxWnd与你定义的HWND m_hRxWnd临时变量并不是同一个东西。
      

  3.   

    void SubFunc(void) 

            Func(m_test,m_hRxWnd); 

    这个里面的m_hRxWnd是成员变量。HWND m_hRxWnd这是个局部变量。。同名。域不同。在名字解析期间查找域的顺序由内向外,所以在外围域中的声明被嵌套域中的同名声明所隐藏。