如题

解决方案 »

  1.   

    但是如果我已经定义了B的对象 myView,直接在A中用myView来引用B的成员为什么不可以呢?
      

  2.   

    “但是如果我已经定义了B的对象 myView,直接在A中用myView来引用B的成员为什么不可以呢?”?不可以?能把源码帖上来看一下吗?
      

  3.   

    “但是如果我已经定义了B的对象 myView,直接在A中用myView来引用B的成员为什么不可以呢?”? 
    如果是这样的话,那就是类和对象之间的关系问题了。一个类可以有多个对象的啊,你在A中定义了B的对象myView实际上是生成了另外一个B类的对象,跟你前面的B视图已经是两回事情了。
    他们针对的是两个不同的内存块了。就像是声明INT类型的 M,然后再声明一个INT类型的K;
    去M的值能用K来完成么?而且视图类声明对象好像不太可能吧,那后续的初始化工作可多了去了,没那么容易吧。
      

  4.   

    但是如果我已经定义了B的对象 myView,直接在A中用myView来引用B的成员为什么不可以呢?
    =======================================================
    可以啊,问题是你在A中能不能得到myView呢?比如,你定义的myView是一个全局变量,那么当然可以用它,
      

  5.   

    简单的说,你必须要保证你在A中处理的B类实例和相关地方的B类是同一个实例,只要保证这一点,管你怎么处理都可以
      

  6.   

    但是如果我已经定义了B的对象 myView,直接在A中用myView来引用B的成员为什么不可以呢?
    可以 public就可以了。。
      

  7.   

    呵呵,看大家讨论的这么热烈,我把源代码贴出来大家帮我看下吧:
    class CTree_TestDlg : public CDialog
    {
    // Construction
    public:
    CTree_TestDlg(CWnd* pParent = NULL); // standard constructor// Dialog Data
    //{{AFX_DATA(CTree_TestDlg)
    enum { IDD = IDD_TREE_TEST_DIALOG };
    CTreeCtrl m_TreeCtrl;//这是我定义的树形控件
    //}}AFX_DATA
              .......
              .......
    }
    定义了另一个对话框,在对对话框初始化的时候要用到m_TreeCtrl:BOOL CViewInformation::OnInitDialog() 
    {
    CDialog::OnInitDialog();

    // TODO: Add extra initialization here

    CTree_TestDlg* pParent = (CTree_TestDlg*)m_pParentWnd;
    CTreeCtrl* m_TreeCtrl = &(pParent->m_TreeCtrl);

    HTREEITEM hSel = m_TreeCtrl->GetSelectedItem();//取得选项句柄; 
            HTREEITEM hPar = m_TreeCtrl->GetParentItem(hSel);

    if(hSel==NULL) return FALSE;//无任何选项则返回

    CString cText=m_TreeCtrl->GetItemText(hSel);//取得数据项名

    CString cPtext = m_TreeCtrl->GetItemText(hPar);//取得数据项的父节点
            .........
            .........
    }
    当我在这段代码中直接用m_TreeCtrl的时候就会出错,如:m_TreeCtrl.GetItemText(hSel),只能取到控件的指针之后才可以用,这是为什么呢?