我创建了一个简单SDI工程(CAaaApp/CMainFame/CAaaView/CAaaDoc),其中CAaaView :public CFormView,
然后在工程中再添加一个视图CBbbView :public CListView ,这是编译会出现错误
CAaaView:error C2143: syntax error : missing ';' before '*'
CAaaView:error C2501: 'CAaaDoc' : missing storage-class or type specifiers
CAaaView:error C2501: 'GetDocument' : missing storage-class or type specifiers如果我创建SDI工程后就加入一个LISTVIEW,则没有这个问题。
这是什么原因?怎么解决?如果在CAaaView .h  中屏蔽掉
public:
CAaaDoc* GetDocument();

在CAaaView .cpp 中屏蔽掉
CHardwareDoc* CHardwareView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CHardwareDoc)));
return (CHardwareDoc*)m_pDocument;
}这样就可以通过,但是好像对打印和预览有问题。

解决方案 »

  1.   

    再你的listview的派生类的头文件中包一个头文件
    #include <afxcview.h>
      

  2.   

    再你的CMainFrame的头文件中,包一下文档类与视类的头文件!!!
      

  3.   

    我是在MainFomn.cpp 中加了这段代码产生的
             CView * pOldActiveView = GetActiveView();
    CView * pNewActiveView = (CView *)GetDlgItem(nView);
    if (pNewActiveView == NULL)
    {
    switch(nView)
    {
    case HARDWARE :
    pNewActiveView = (CView *) new CAaaFormView;
    break;
    case REPORT :
    pNewActiveView = (CView *) new CReportView;
    break;
    }
    }
      

  4.   

    在MainForm.h 中定义:
    enum eView {HARDWARE = 1, REPORT = 2};
      

  5.   

    我也碰到过,我是把GetDucoment去掉,然后用((CMainFrame*)AfxGetMainWnd())->GetActiveDocument得到文档的
      

  6.   

    将#include "HardwareDoc.h"从AaaView .cpp移到AaaView ..h文件中
      

  7.   

    问题解决,谢谢gaoshengqiang(午夜星光) 
    就是移一下头文件就可以了。真没想到!!!