以下是个视图切换的函数
void CMainFrame::SwitchToForm(int nForm)
{ CView *pOldActiveView=GetActiveView();
CView *pNewActiveView=(CView*)GetDlgItem(nForm); if(pNewActiveView==NULL)
{
if(nForm==IDD_LIBRARY_FORM)
{
pNewActiveView=(CView*)new CLibraryView;
}
if(nForm==IDD_BOOKINFO_FORM)
{
pNewActiveView=(CView*)new CBookInfoView;
}
if(nForm==IDD_PROVIDER_FORM)
{
pNewActiveView=(CView*)new CProviderView;
} CCreateContext context;
context.m_pCurrentDoc=pOldActiveView->GetDocument();
pNewActiveView->Create(NULL,NULL,0L,CFrameWnd::rectDefault,this,nForm,&context);
pNewActiveView->OnInitialUpdate();
} SetActiveView(pNewActiveView);
pNewActiveView->ShowWindow(SW_SHOW);
pOldActiveView->ShowWindow(SW_HIDE); int ID; if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CLibraryView))
ID=IDD_LIBRARY_FORM;
if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CBookInfoView))
ID=IDD_BOOKINFO_FORM;
if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CProviderView))
ID=IDD_PROVIDER_FORM; pOldActiveView->SetDlgCtrlID(ID);
pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); RecalcLayout();}
但是有以下错误
d:\work\library\libraryview.h(29) : error C2143: syntax error : missing ';' before '*'
d:\work\library\libraryview.h(29) : error C2501: 'CLibraryDoc' : missing storage-class or type specifiers
d:\work\library\libraryview.h(29) : error C2501: 'GetDocument' : missing storage-class or type specifiers
D:\work\Library\MainFrm.cpp(122) : error C2248: 'CLibraryView::CLibraryView' : cannot access protected member declared in class 'CLibraryView'
d:\work\library\libraryview.h(17) : see declaration of 'CLibraryView::CLibraryView'
D:\work\Library\MainFrm.cpp(126) : error C2248: 'CBookInfoView::CBookInfoView' : cannot access protected member declared in class 'CBookInfoView'
d:\work\library\bookinfoview.h(18) : see declaration of 'CBookInfoView::CBookInfoView'
D:\work\Library\MainFrm.cpp(130) : error C2248: 'CProviderView::CProviderView' : cannot access protected member declared in class 'CProviderView'
d:\work\library\providerview.h(18) : see declaration of 'CProviderView::CProviderView'
CLibraryView是由Wizard生成
其余几个视图是自定义的
各位感兴趣的分析一下错误原因,不胜感谢!
void CMainFrame::SwitchToForm(int nForm)
{ CView *pOldActiveView=GetActiveView();
CView *pNewActiveView=(CView*)GetDlgItem(nForm); if(pNewActiveView==NULL)
{
if(nForm==IDD_LIBRARY_FORM)
{
pNewActiveView=(CView*)new CLibraryView;
}
if(nForm==IDD_BOOKINFO_FORM)
{
pNewActiveView=(CView*)new CBookInfoView;
}
if(nForm==IDD_PROVIDER_FORM)
{
pNewActiveView=(CView*)new CProviderView;
} CCreateContext context;
context.m_pCurrentDoc=pOldActiveView->GetDocument();
pNewActiveView->Create(NULL,NULL,0L,CFrameWnd::rectDefault,this,nForm,&context);
pNewActiveView->OnInitialUpdate();
} SetActiveView(pNewActiveView);
pNewActiveView->ShowWindow(SW_SHOW);
pOldActiveView->ShowWindow(SW_HIDE); int ID; if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CLibraryView))
ID=IDD_LIBRARY_FORM;
if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CBookInfoView))
ID=IDD_BOOKINFO_FORM;
if(pOldActiveView->GetRuntimeClass()==RUNTIME_CLASS(CProviderView))
ID=IDD_PROVIDER_FORM; pOldActiveView->SetDlgCtrlID(ID);
pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); RecalcLayout();}
但是有以下错误
d:\work\library\libraryview.h(29) : error C2143: syntax error : missing ';' before '*'
d:\work\library\libraryview.h(29) : error C2501: 'CLibraryDoc' : missing storage-class or type specifiers
d:\work\library\libraryview.h(29) : error C2501: 'GetDocument' : missing storage-class or type specifiers
D:\work\Library\MainFrm.cpp(122) : error C2248: 'CLibraryView::CLibraryView' : cannot access protected member declared in class 'CLibraryView'
d:\work\library\libraryview.h(17) : see declaration of 'CLibraryView::CLibraryView'
D:\work\Library\MainFrm.cpp(126) : error C2248: 'CBookInfoView::CBookInfoView' : cannot access protected member declared in class 'CBookInfoView'
d:\work\library\bookinfoview.h(18) : see declaration of 'CBookInfoView::CBookInfoView'
D:\work\Library\MainFrm.cpp(130) : error C2248: 'CProviderView::CProviderView' : cannot access protected member declared in class 'CProviderView'
d:\work\library\providerview.h(18) : see declaration of 'CProviderView::CProviderView'
CLibraryView是由Wizard生成
其余几个视图是自定义的
各位感兴趣的分析一下错误原因,不胜感谢!
检查一下你那几个View的构造函数,改成public的
之前有那么多错
我突发奇想把CLibrary的GetDocument()注释掉,出错很正常
但是我在把注释去掉,奇迹出现了,错误没有了
谁能解释一下这个现象
d:\work\library\libraryview.h(17) : see declaration of 'CLibraryView::CLibraryView'
D:\work\Library\MainFrm.cpp(126) : error C2248: 'CBookInfoView::CBookInfoView' : cannot access protected member declared in class 'CBookInfoView'
d:\work\library\bookinfoview.h(18) : see declaration of 'CBookInfoView::CBookInfoView'
D:\work\Library\MainFrm.cpp(130) : error C2248: 'CProviderView::CProviderView' : cannot access protected member declared in class 'CProviderView'
d:\work\library\providerview.h(18) : see declaration of 'CProviderView::CProviderView'默认的CVIEW的构造函数是PROTECTED的,改成PUBLIC
d:\work\library\libraryview.h(29) : error C2143: syntax error : missing ';' before '*'
d:\work\library\libraryview.h(29) : error C2501: 'CLibraryDoc' : missing storage-class or type specifiers
d:\work\library\libraryview.h(29) : error C2501: 'GetDocument' : missing storage-class or type specifiers看看你是否重复包含了头文件,比如,CLibraryDoc.h里包含了CLibrayView.h而且CLibrayView.h又包含了CLibraryDoc.h