作者:青樽有酒_585_587 | 来源:互联网 | 2023-09-07 12:49
如何增加分隔视图,我这里也不相关的书和代码,完全按照步骤去做,代码也不一样,我也对了一下给的示例源程序,完全都一样,为什么我的就编译不通过呢?找不出问题来,我在CMainFrame
如何增加分隔视图,我这里也不相关的书和代码,完全按照步骤去做,代码也不一样,
我也对了一下给的示例源程序,完全都一样,为什么我的就编译不通过呢?找不出问题来,
我在CMainFrame::OnCreateClient中
m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(CSplitWndDemoView),CSize(100,100), pContext);
m_wndSplitter1.CreateView(2,0,RUNTIME_CLASS(CView4),CSize(100,100),pContext);
m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CView2),CSize(400,300),pContext); //将CView3类连接到第二个分栏对象的0行1列
m_wndSplitter2.CreateView(0,1,RUNTIME_CLASS(CView3),CSize(400,300),pContext);
时编译说没有CSplitWndDemoView CView4 CView2 CView3这几个类,但是我也在MainFrm.cpp中include了呀,为什么就是不通过呢,
14 个解决方案
如果包含了相应的头文件,则不会提示相关的类没有定义的。请楼主再检查一下。
它提示我插入的类有问题,
syntax error : missing ';' before '*'
d:\splitterwnddemo\splitterwnddemoview.h(21) : error C2501: 'CSplitterWndDemoDoc' : missing storage-class or type specifiers
d:\splitterwnddemo\splitterwnddemoview.h(21) : error C2501: 'GetDocument' : missing storage-class or type specifiers
执行 cl.exe 时出错.
SplitterWndDemo.exe - 1 error(s), 0 warning(s)
但是SplitterWndDemoDoc.h是系统自动生成的,为什么还提示有错呢,
d:\splitterwnddemo\splitterwnddemoview.h(21) : error C2143: syntax error : missing ';' before '*'
d:\splitterwnddemo\splitterwnddemoview.h(21) : error C2501: 'CSplitterWndDemoDoc' : missing storage-class or type specifiers
d:\splitterwnddemo\splitterwnddemoview.h(21) : error C2501: 'GetDocument' : missing storage-class or type specifiers
执行 cl.exe 时出错.
SplitterWndDemo.exe - 1 error(s), 0 warning(s)
其它地方应该是没错,就是一在CMainFrame::OnCreateClient中写上代相关代码就出错
加了,用 m_wndSplitter.CreateView(0,0,pContext->m_pNewViewClass,paneSize,pContext);
就没问题,但是若用
pContext->m_pNewViewClass=RUNTIME_CLASS(CDirTreeView);
m_wndSplitter.CreateView(0,0,pContext->m_pNewViewClass,paneSize,pContext);
它就会说
C:\Documents and Settings\Administrator\桌面\MyEDiary\MainFrm.cpp(182) : error C2653: 'CDirTreeView' : is not a class or namespace name
C:\Documents and Settings\Administrator\桌面\MyEDiary\MainFrm.cpp(182) : error C2065: 'classCDirTreeView' : undeclared identifier
执行 cl.exe 时出错.
MainFrm.obj - 1 error(s), 0 warning(s)
头文件中也#include "DirTreeView.h"了,到底是什么地方出错了,
这可能是个重复包含头文件的问题。
用下面的步骤试试。
1、去掉所有头文件中的include语句。(不去掉的话很容易产生重复包含)。可以在.cpp中添加头文件。
2、如果在头文件中就引入了某个类。只需要声明一下定义就OK了。比如:class CDirTreeView;
我新加了一个类class CDirTreeView : public CTreeView
又重载了CMainFrame::OnCreateClient
MainFrm.cpp中#include "DirTreeView.h"
在CMainFrame::OnCreateClient中加入代码
CRect rect;
GetClientRect(&rect);
CSize paneSize(rect.Width()/6,rect.Height());
m_wndSplitter.CreateStatic(this,1,2);
m_wndSplitter.CreateView(0,1,pContext->m_pNewViewClass,paneSize,pContext);
pContext->m_pNewViewClass=RUNTIME_CLASS(CDirTreeView);
//
m_wndSplitter.CreateView(0,0,pContext->m_pNewViewClass,paneSize,pContext);
m_wndSplitter.RecalcLayout();
m_wndSplitter.SetActivePane(0,1);
return TRUE;
其它地方未做任何修改,但是编译时有误
c:\documents and settings\administrator\桌面\新建文件夹\myediary\dirtreeview.h(14) : error C2504: 'CTreeView' : base class undefined
这是什么地方出错了
stdafx.h文件中加入头文件Afxcview.h