使用VC6.0 的向导生成基于MFC的工程后, 偶尔会发现当需要对某个类重载虚函数时, 右键添加不灵光了, 总是显示"no virtual functions available to be overridden", 而同样工程中的其它类可以正常通过右键重载虚函数。
删除.clw .ncb等文件 重新编译 折腾了一番 发现还是无果
感觉只有个别类出现这种问题有点奇怪,网上牛人们都说可以通过手动添加来解决。
是啊,手动添加固然能解决问题,但既然MS帮你做好了向导,为什么不好好利用呢?
本人就是个爱偷懒的货,就对比研究了下正常类的代码和出现问题的类的代码(看的是自动生成向导生成的虚函数相关的代码)。结果发现出现右键添加问题的类果然出了点问题。
具体出问题的地方是类的头文件中,IDE自动生成向导生成的部分代码(如下所示):
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CXXXView)
public:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual void OnInitialUpdate(); // called first time after construct
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnPrint(CDC* pDC, CPrintInfo* pInfo);
virtual void OnDraw(CDC* pDC); // overridden to draw this view
//}}AFX_VIRTUAL
上面代码中红色标出的部分,本来正常应该是这个类的类名,但自动生成向导却没有正确生成这个类名,而是生成一个叫CcssView的奇怪名字,当我改回正常类名后,试了一下,果然可以通过右键正常重载虚函数!
看来微软的平台偶尔也会出现这种小Bug啊
以后碰到这种问题 心里就有底了 知道该去哪里查找问题并解决之~
问题虽小,不过希望能对自己有启示作用:即任何问题都是有原因的,在找出根源之前换用另一种方法,其实是在逃避问题。