我从CButton类派生了一个自绘按钮类CBtmpbutton,但是在CBtmpbutton中增加一个CPCBView* m_pview成员变量出错信息如下:
:\downloads\读写hid设备步骤\键盘pcb测试程序\btmpbutton.h(37) : error C2143: syntax error : missing ';' before '*'
e:\downloads\读写hid设备步骤\键盘pcb测试程序\btmpbutton.h(37) : error C2501: 'CPCBView' : missing storage-class or type specifiers
e:\downloads\读写hid设备步骤\键盘pcb测试程序\btmpbutton.h(37) : error C2501: 'm_pview' : missing storage-class or type specifiers
执行 cl.exe 时出错.
Creating browse info file...键盘PCB测试程序.exe - 1 error(s), 0 warning(s)我在btmpbutton.h中增加#include "键盘PCB测试程序View.h":
//#include "stdafx.h"
//#include "键盘PCB测试程序.h"
#include "键盘PCB测试程序View.h"
//#include "键盘PCB测试程序Doc.h"
class CBtmpbutton : public CButtonBtmpbutton.cpp
e:\downloads\读写hid设备步骤\键盘pcb测试程序\键盘pcb测试程序view.h(22) : error C2143: syntax error : missing ';' before '*'
e:\downloads\读写hid设备步骤\键盘pcb测试程序\键盘pcb测试程序view.h(22) : error C2501: 'CPCBDoc' : missing storage-class or type specifiers
e:\downloads\读写hid设备步骤\键盘pcb测试程序\键盘pcb测试程序view.h(22) : error C2501: 'GetDocument' : missing storage-class or type specifiers
执行 cl.exe 时出错.
Creating browse info file...键盘PCB测试程序.exe - 1 error(s), 0 warning
谁能讲讲为什么会这样,该怎样解决?
:\downloads\读写hid设备步骤\键盘pcb测试程序\btmpbutton.h(37) : error C2143: syntax error : missing ';' before '*'
e:\downloads\读写hid设备步骤\键盘pcb测试程序\btmpbutton.h(37) : error C2501: 'CPCBView' : missing storage-class or type specifiers
e:\downloads\读写hid设备步骤\键盘pcb测试程序\btmpbutton.h(37) : error C2501: 'm_pview' : missing storage-class or type specifiers
执行 cl.exe 时出错.
Creating browse info file...键盘PCB测试程序.exe - 1 error(s), 0 warning(s)我在btmpbutton.h中增加#include "键盘PCB测试程序View.h":
//#include "stdafx.h"
//#include "键盘PCB测试程序.h"
#include "键盘PCB测试程序View.h"
//#include "键盘PCB测试程序Doc.h"
class CBtmpbutton : public CButtonBtmpbutton.cpp
e:\downloads\读写hid设备步骤\键盘pcb测试程序\键盘pcb测试程序view.h(22) : error C2143: syntax error : missing ';' before '*'
e:\downloads\读写hid设备步骤\键盘pcb测试程序\键盘pcb测试程序view.h(22) : error C2501: 'CPCBDoc' : missing storage-class or type specifiers
e:\downloads\读写hid设备步骤\键盘pcb测试程序\键盘pcb测试程序view.h(22) : error C2501: 'GetDocument' : missing storage-class or type specifiers
执行 cl.exe 时出错.
Creating browse info file...键盘PCB测试程序.exe - 1 error(s), 0 warning
谁能讲讲为什么会这样,该怎样解决?
解决方案 »
- 使用MFC编程时,我给对话框的子窗口设置了垂直滚动条,但点击垂直滚动条没有作用。怎么回事?
- 自己做的软件,请大家给点建议
- 无模式对话框的问题
- 读位图到内存并显示在picture控件上
- VC有没有象VB那样的timer控件,或者函数什么的,就是定期执行某个操作?
- [求助]VC6中无法显示ddraw.h的定义
- 有谁知道如何加一个CWnd的派生类
- 怎么获得系统的目录树
- 关于ActiveX与网页的结合问题
- 怎么用编程实现操作代理服务器,控制某台通过代理服务器的电脑上网或者不能让它上网?
- 把字符串写入WINDOWS的剪切板老是不成功,怎么回事?
- CListCtrl中动态创建CEdit控件,CEdit控件不显示光标
#include "键盘PCB测试程序View.h"
先包含Doc.h,vc6的编译器有这个bug.
#include "stdafx.h"
#include "键盘PCB测试程序.h"
#include "MainFrame.h"
#include "键盘PCB测试程序Doc.h"
#include "键盘PCB测试程序View.h"
......
然后编译连接都通过了,但是运行时出错,于是跟踪一下发现:程序运行到CBtmpbutton类的构造函数中的
m_pview = (CPCBView*)(((CFrameWnd*)(AfxGetApp()->GetMainWnd()))->GetActiveView()); 出错。
于是将这条长语句拆分成以下语句后查看相关指针值:CPCBApp * papp = (CPCBApp *)AfxGetApp();
CFrameWnd* pmfr = (CFrameWnd*)(papp->GetMainWnd());
m_pview = (CPCBView*)(pmfr->GetActiveView());
发现papp里有值, pmfr里是0X00000000h,也就是pmfr值为空,即找不到主窗口对象指针,再继续跟踪运行即报运行时错误了。
而同样是这条语句m_pview = (CPCBView*)(((CFrameWnd*)(AfxGetApp()->GetMainWnd()))->GetActiveView());
我在这个程式没有添加CBtmpbutton类这部分功能的时候在CAboutDlg类中也添加了一个成员变量CPCBView* m_pview,也用这条语句在CAboutDlg类的构造函数进行初始化赋值,没有问题,我还在CAboutDlg类的其它函数中用这个m_pview访问了CPCBView类的公有变量,并显示在了关于对话框的EDIT控件中了的,为什么在自定义的类中就无法取得CFrameWnd* pmfr呢???
我注意到了,CAboutDlg类是定义在 “键盘PCB测试程序.h”中的,而程序全局变量CPCBApp TheApp;和CAboutDlg()构造函数也是在“键盘PCB测试程序.cpp”中的,那么在自定义的CBtmpbutton类中使用AfxGetApp();能正确地得到TheApp对象的地址指针吗?如果正确地得到TheApp对象的地址指针,为什么得不到正确CFrameWnd* pmfr???,也注意到了:“Btmpbutton.cpp”中所包含的头文件几乎和“键盘PCB测试程序.cpp”中所包含的头文件一模一样,那编译器编译连接通过,编译器能区分一个工程中那一个.cpp文件是程序的入口文件吗(如果能区分是靠检测程序中的WinMain()函数区分吗?),会不会是不能区分程序的入口.cpp这个原因造成运行时错误的?本来在自定义的类中定义CPCBView* m_pview然后在类中利用m_pview访问CPCBView类的公有变量,不利于自定义类(Button控件)的封装,网上也基本搜不到这种使用例子,但是如果一定想要在自定义类中象在关于对话框类CAboutDlg中这样访问CPCBView或CFrameWnd或CPCBDoc类的公有变量,能不能做到?不能做到是为什么?有啥变通的好的做法?
请大虾们谈谈,指导指导!!!