描述:
上次上传附件没有成功,这次附件里面是源代码。
想在主对话框maindlg里面的成员函数OnButtonAdd里写CinsertDlg.DoModal(),说CinsertDlg不是一个类.我都已经新建这个类了,并且把它和对话框资源做了连接,而且也include头文件了,但是总是报错说它没有声明不是一个类什么的。我为了找到错误,在主程序里面写CInsertDlg dlg; dlg.domodal();运行的时候迸出来了这个框,说明这个类已经是声明了的,但是在主对话框里面的onButtonAdd里写就不行,总说不是一个类没声明之类,后来东改西改的,现在连主程序里打开CInsertDLG的功能也出错了,因为根本就不知道错在何处,改都改不回去。附件里面是我的源代码,求高人帮我看看吧,谢谢了,都整了两天了。我真不甘心被该死的C++刁难。
附:是在李马大侠的一个信息管理系统代码基础上改的
解决方案1:
我已经解决了。我可以把原码给你。下面是原因,如果不懂的话可以看代码,出错的地方已经标出了。
//#ifndef ATLGUI_MYMIS
//#define ATLGUI_MYMIS
//上面这两个宏就是造成CInsertDlg类不能定义的罪魁祸首,楼主,因为我们在CMainDlg类中也有他们。
//主程序中#include "MainDlg.h"也就是说程序先定义的是CMainDlg类,可在定义这个类的时候,
//我们会调用这两个宏#ifndef ATLGUI_MYMIS #define ATLGUI_MYMIS,它们的意思是,如果没有定义ATLGUI_MYMIS
//的话,我们就define变这个变量,可接下来,我们在主程序中又调用#include "InsertDlg.h",可在这个头文件中
//也有这两个宏,因为ATLGUI_MYMIS变量已经定义过了。因此这个宏不能满足,就会退出,当然就没定义CInsertDlg了
//这两个宏也是重要的。它可以避免一个类的重复定义,但是楼主,你错就错在不应该两个类的宏判断都用一样的变量
//这样的话,第一类定义了,其它的类就不能在定义了。可以换个变量(不同类用不同变量)如下。
#ifndef XXXXX
#define XXXXX
第一,你InsertDlg.h有include "InsertDlg.h"包含自己,第一个错误
第二,InsertDlg.h定义
#ifndef ATLGUI_MYMIS
#define ATLGUI_MYMIS
...
#endif
和MainDlg.h中定义一致,导致编译器认为InsertDlg.h中的内容已定义,但实际上又没有定义,所以会有error C2065: 'CInsertDlg' : undeclared identifier