不知道为什么,GetDocument返回值是空,各位大虾帮帮忙CCellTextDoc * m_pDoc =(CCellTextDoc *) GetDocument(); 
ASSERT_VALID(m_pDoc);调试发现  m_pDoc的值是空的(0x00000000)

解决方案 »

  1.   

    CCellTextDoc * m_pDoc =(CCellTextDoc *) GetDocument();  
    放的位置不对
      

  2.   


    我刚解决了
    重新 new 一个就可以获得,这是为什么啊?
      

  3.   

    我重新 new 一个m_pDoc,然后再GetDocument()就可以得到值,这是为什么啊?
      

  4.   

    我重新 new 一个m_pDoc,然后再GetDocument()就可以得到值,这是为什么啊?
      

  5.   

    那么GetDocument()很可能就是你刚才重新new出来的,木有意义啊.
      

  6.   

    GetDocument()是View类的成员函数,首先你得保证你打开或新建了文档,没有文档肯定返回空啊。 
      

  7.   

    我想各位可能没有理解我的意思
    如果代码这么写
    CCellTextDoc * m_pDoc =(CCellTextDoc *) GetDocument();  
    ASSERT_VALID(m_pDoc);
    那么 m_pDoc是空值如果代码这么写
    CCellTextDoc * m_pDoc = new CCellTextDoc();  
    m_pDoc =(CCellTextDoc *) GetDocument();
    ASSERT_VALID(m_pDoc);
    那么 m_pDoc就会得到正确的值我想知道为什么会是这样的结果?各位难道没有遇到这样的情况吗?
      

  8.   

    你好,ASSERT_VALID是检查的是对象内部的合法性,如果这个对象内部没有值,那么这个对象就为空,否则就不为空。CCellTextDoc*m_pDoc=(CCellTextDoc*)GetDocument()是将m_pDoc的指针指向了GetDocument()的这个对象,但是m_pDoc内部本身就没有值,所以就会发现m_pDoc是空值。
    而下面CCellTextDoc*m_pDoc=new CCellTextDoc()这个,你先为m_pDoc分配了内存空间,然后再通过
    m_pDoc=(CCellTextDoc*)GetDocument()将GetDocument()的值赋给了m_pDoc,所以这个时候m_pDoc对象就有了值,所以这个时候m_pDoc就会得到正确的值。