为什么提示1>d:\项目\windowsprogram\mfc2\mfc2\mfc.cpp(42): error C2040: “classCCmdTarget”:“CRuntimeClass []”与“CRuntimeClass”的间接寻址级别不同
1>d:\项目\windowsprogram\mfc2\mfc2\mfc.cpp(42): error C2653: “base_class_name”: 不是类或命名空间名称
1>d:\项目\windowsprogram\mfc2\mfc2\mfc.cpp(42): error C2065: “classbase_class_name”: 未声明的标识符
1>d:\项目\windowsprogram\mfc2\mfc2\mfc.cpp(42): error C2059: 语法错误:“)”
代码如下
my.h
#include"mfc.h"class CMyWinApp : public CWinApp
{
public :
CMyWinApp(){};
~CMyWinApp(){};
virtual BOOL InitInstance ();
};class CMyFrameWnd:public CFrameWnd
{
public:
CMyFrameWnd();
~CMyFrameWnd(){};
};class CMyDoc : public CDocument
{
public :
CMyDoc()
{}
~CMyDoc()
{}
};class CMyView : public CView
{
public:
CMyView()
{
}
~CMyView()
{}
};
void PrintAllClasses();
mfc.h
#define BOOL int
#define TRUE 1
#define FALSE 0#define LPCSTR LPSTR
typedef char* LPSTR;
#define UINT int
#define PASCAL _stdcall#include<iostream>
using namespace std;
class CObject;
struct CRuntimeClass
{
LPCSTR m_lpszClassName;
int m_nObjectSize;
UINT m_wSchema;
CObject *(PASCAL *m_pfnCreateObject) ();
CRuntimeClass *m_pBaseClass ;
static CRuntimeClass *pFirstClass;
CRuntimeClass *m_pNextClass;
};struct AFX_CLASSINIT
{
AFX_CLASSINIT(CRuntimeClass *pNewClass);};
#define RUNTIME_CLASS(class_name) \
(&class_name::class##class_name)#define DECLARE_DYNAMIC(class_name)\
public:\
static CRuntimeClass class##class_name;\
virtual CRuntimeClass *GetRuntimeClass() const;#define _IMPLEMENT_RUNTIMECLASS(class_name,base_class_name,wSchema,pfnNew)\
static char _lpsz##class_name[] = #class_name;\
CRuntimeClass class_name::class##class_name[] = {\
_lpsz##class_name,sizeof(class_name),wSchema,pfnNew,RUNTIME_CLASS(base_class_name),NULL)};\
static AFX_CLASSINIT _init_##class_name(&class_name::class##class_name);\
CRuntimeClass *class_name::GetRuntimeClass()const\
{ return &class_name::class##class_name;}\#define IMPLEMENT_DYNAMIC(class_name, base_name_class)\
_IMPLEMENT_RUNTIMECLASS(class_name,base_class_name,0xFFFF,NULL)
class CObject
{
public:
CObject(){
}
~CObject(){
}
virtual CRuntimeClass* GetRuntimeClass() const;
public:
static CRuntimeClass classCObject;
};class CCmdTarget : public CObject
{
DECLARE_DYNAMIC(CCmdTarget)
public:
CCmdTarget(){
}
~CCmdTarget(){
}
};class CWinThread : public CCmdTarget
{
DECLARE_DYNAMIC(CWinThread)
public:
CWinThread(){}
~CWinThread(){} virtual BOOL InitInstance (){
return TRUE;
}
virtual int Run()
{
return 1;}};class CWnd;class CWinApp : public CWinThread
{
DECLARE_DYNAMIC(CWinApp)
public:
CWinApp *m_pCurrentWinApp;
CWnd *m_pMainWnd;
public:
CWinApp(){
m_pCurrentWinApp = NULL;
}
~CWinApp(){
}
virtual BOOL InitApplication(){
return TRUE;}
virtual BOOL InitInstance()
{
return TRUE;
}
virtual int Run()
{
return CWinThread::Run();
}
};class CDocument : public CCmdTarget
{
DECLARE_DYNAMIC(CDocument)
public:
CDocument()
{
}
~CDocument()
{
}
};
class CWnd : public CCmdTarget
{
DECLARE_DYNAMIC(CWnd)
public:
CWnd()
{ }
~CWnd()
{
}
virtual BOOL Create();
BOOL CreateEX();
virtual BOOL PreCreateWindow();
};class CFrameWnd : public CWnd
{
DECLARE_DYNAMIC(CFramewnd)
public:
CFrameWnd()
{
}
~CFrameWnd()
{ }
BOOL Create();
virtual BOOL PreCreateWindow();
};class CView : public CWnd
{
DECLARE_DYNAMIC(CView)
public:
CView()
{ }
~CView()
{ }
};
CWinApp *AfxGetApp();
mfc.cpp
#include"my.h"extern CMyWinApp theApp;static char szObject[] = "CObject";
struct CRuntimeClass CObject::classCObject = {
szObject,sizeof(CObject),0xffff,NULL,NULL,NULL};
static AFX_CLASSINIT _init_CObject(&CObject::classCObject);
CRuntimeClass* CRuntimeClass::pFirstClass = NULL; AFX_CLASSINIT::AFX_CLASSINIT(CRuntimeClass *pNewClass)
{
pNewClass->m_pNextClass = CRuntimeClass::pFirstClass;
CRuntimeClass::pFirstClass = pNewClass;
}CRuntimeClass *CObject::GetRuntimeClass()const
{
return &CObject::classCObject;
}BOOL CWnd::Create()
{
return TRUE;
}
BOOL CWnd::CreateEX()
{
PreCreateWindow();
return TRUE;
}BOOL CWnd::PreCreateWindow()
{
CreateEX();
return TRUE;
}BOOL CFrameWnd::PreCreateWindow()
{
return TRUE;
}
IMPLEMENT_DYNAMIC(CCmdTarget,CObject)
IMPLEMENT_DYNAMIC(CWinThread,CCmdTarget)
IMPLEMENT_DYNAMIC(CWinApp,CWinThread)
IMPLEMENT_DYNAMIC(CWnd,CCmdTarget)
IMPLEMENT_DYNAMIC(CFrameWnd,CWnd)
IMPLEMENT_DYNAMIC(CDocument,CCmdTarget)
IMPLEMENT_DYNAMIC(CView,CWnd)CWinApp *AfxGetApp()
{
return theApp.m_pCurrentWinApp;
}
my.cpp
#include"my.h"
CMyWinApp theApp;
BOOL CMyWinApp::InitInstance()
{
m_pMainWnd = new CMyFrameWnd;
return TRUE;
}
CMyFrameWnd::CMyFrameWnd()
{
Create();
}void PrintAllClasses()
{
CRuntimeClass *pClass; for(pClass = CRuntimeClass::pFirstClass;pClass != NULL;pClass = pClass->m_pNextClass)
{
cout<<pClass->m_lpszClassName<<endl;
}
}int main()
{
CWinApp *pApp = AfxGetApp();
pApp->InitApplication();
PrintAllClasses();
return 0;
}
1>d:\项目\windowsprogram\mfc2\mfc2\mfc.cpp(42): error C2653: “base_class_name”: 不是类或命名空间名称
1>d:\项目\windowsprogram\mfc2\mfc2\mfc.cpp(42): error C2065: “classbase_class_name”: 未声明的标识符
1>d:\项目\windowsprogram\mfc2\mfc2\mfc.cpp(42): error C2059: 语法错误:“)”
代码如下
my.h
#include"mfc.h"class CMyWinApp : public CWinApp
{
public :
CMyWinApp(){};
~CMyWinApp(){};
virtual BOOL InitInstance ();
};class CMyFrameWnd:public CFrameWnd
{
public:
CMyFrameWnd();
~CMyFrameWnd(){};
};class CMyDoc : public CDocument
{
public :
CMyDoc()
{}
~CMyDoc()
{}
};class CMyView : public CView
{
public:
CMyView()
{
}
~CMyView()
{}
};
void PrintAllClasses();
mfc.h
#define BOOL int
#define TRUE 1
#define FALSE 0#define LPCSTR LPSTR
typedef char* LPSTR;
#define UINT int
#define PASCAL _stdcall#include<iostream>
using namespace std;
class CObject;
struct CRuntimeClass
{
LPCSTR m_lpszClassName;
int m_nObjectSize;
UINT m_wSchema;
CObject *(PASCAL *m_pfnCreateObject) ();
CRuntimeClass *m_pBaseClass ;
static CRuntimeClass *pFirstClass;
CRuntimeClass *m_pNextClass;
};struct AFX_CLASSINIT
{
AFX_CLASSINIT(CRuntimeClass *pNewClass);};
#define RUNTIME_CLASS(class_name) \
(&class_name::class##class_name)#define DECLARE_DYNAMIC(class_name)\
public:\
static CRuntimeClass class##class_name;\
virtual CRuntimeClass *GetRuntimeClass() const;#define _IMPLEMENT_RUNTIMECLASS(class_name,base_class_name,wSchema,pfnNew)\
static char _lpsz##class_name[] = #class_name;\
CRuntimeClass class_name::class##class_name[] = {\
_lpsz##class_name,sizeof(class_name),wSchema,pfnNew,RUNTIME_CLASS(base_class_name),NULL)};\
static AFX_CLASSINIT _init_##class_name(&class_name::class##class_name);\
CRuntimeClass *class_name::GetRuntimeClass()const\
{ return &class_name::class##class_name;}\#define IMPLEMENT_DYNAMIC(class_name, base_name_class)\
_IMPLEMENT_RUNTIMECLASS(class_name,base_class_name,0xFFFF,NULL)
class CObject
{
public:
CObject(){
}
~CObject(){
}
virtual CRuntimeClass* GetRuntimeClass() const;
public:
static CRuntimeClass classCObject;
};class CCmdTarget : public CObject
{
DECLARE_DYNAMIC(CCmdTarget)
public:
CCmdTarget(){
}
~CCmdTarget(){
}
};class CWinThread : public CCmdTarget
{
DECLARE_DYNAMIC(CWinThread)
public:
CWinThread(){}
~CWinThread(){} virtual BOOL InitInstance (){
return TRUE;
}
virtual int Run()
{
return 1;}};class CWnd;class CWinApp : public CWinThread
{
DECLARE_DYNAMIC(CWinApp)
public:
CWinApp *m_pCurrentWinApp;
CWnd *m_pMainWnd;
public:
CWinApp(){
m_pCurrentWinApp = NULL;
}
~CWinApp(){
}
virtual BOOL InitApplication(){
return TRUE;}
virtual BOOL InitInstance()
{
return TRUE;
}
virtual int Run()
{
return CWinThread::Run();
}
};class CDocument : public CCmdTarget
{
DECLARE_DYNAMIC(CDocument)
public:
CDocument()
{
}
~CDocument()
{
}
};
class CWnd : public CCmdTarget
{
DECLARE_DYNAMIC(CWnd)
public:
CWnd()
{ }
~CWnd()
{
}
virtual BOOL Create();
BOOL CreateEX();
virtual BOOL PreCreateWindow();
};class CFrameWnd : public CWnd
{
DECLARE_DYNAMIC(CFramewnd)
public:
CFrameWnd()
{
}
~CFrameWnd()
{ }
BOOL Create();
virtual BOOL PreCreateWindow();
};class CView : public CWnd
{
DECLARE_DYNAMIC(CView)
public:
CView()
{ }
~CView()
{ }
};
CWinApp *AfxGetApp();
mfc.cpp
#include"my.h"extern CMyWinApp theApp;static char szObject[] = "CObject";
struct CRuntimeClass CObject::classCObject = {
szObject,sizeof(CObject),0xffff,NULL,NULL,NULL};
static AFX_CLASSINIT _init_CObject(&CObject::classCObject);
CRuntimeClass* CRuntimeClass::pFirstClass = NULL; AFX_CLASSINIT::AFX_CLASSINIT(CRuntimeClass *pNewClass)
{
pNewClass->m_pNextClass = CRuntimeClass::pFirstClass;
CRuntimeClass::pFirstClass = pNewClass;
}CRuntimeClass *CObject::GetRuntimeClass()const
{
return &CObject::classCObject;
}BOOL CWnd::Create()
{
return TRUE;
}
BOOL CWnd::CreateEX()
{
PreCreateWindow();
return TRUE;
}BOOL CWnd::PreCreateWindow()
{
CreateEX();
return TRUE;
}BOOL CFrameWnd::PreCreateWindow()
{
return TRUE;
}
IMPLEMENT_DYNAMIC(CCmdTarget,CObject)
IMPLEMENT_DYNAMIC(CWinThread,CCmdTarget)
IMPLEMENT_DYNAMIC(CWinApp,CWinThread)
IMPLEMENT_DYNAMIC(CWnd,CCmdTarget)
IMPLEMENT_DYNAMIC(CFrameWnd,CWnd)
IMPLEMENT_DYNAMIC(CDocument,CCmdTarget)
IMPLEMENT_DYNAMIC(CView,CWnd)CWinApp *AfxGetApp()
{
return theApp.m_pCurrentWinApp;
}
my.cpp
#include"my.h"
CMyWinApp theApp;
BOOL CMyWinApp::InitInstance()
{
m_pMainWnd = new CMyFrameWnd;
return TRUE;
}
CMyFrameWnd::CMyFrameWnd()
{
Create();
}void PrintAllClasses()
{
CRuntimeClass *pClass; for(pClass = CRuntimeClass::pFirstClass;pClass != NULL;pClass = pClass->m_pNextClass)
{
cout<<pClass->m_lpszClassName<<endl;
}
}int main()
{
CWinApp *pApp = AfxGetApp();
pApp->InitApplication();
PrintAllClasses();
return 0;
}
你可以联系我 67945750 这个代码我自己整理出来了,而且可以编译通过实现了RTTI的功能!
#define TRUE 1
#define FALSE 0#define LPCSTR LPSTR
typedef char* LPSTR;
#define UINT int
#define PASCAL _stdcall#include<iostream>
using namespace std;
class CObject;struct CRuntimeClass
{
LPCSTR m_lpszClassName;
int m_nObjectSize;
UINT m_wSchema;
CObject *(PASCAL *m_pfnCreateObject) ();
CRuntimeClass *m_pBaseClass ;
static CRuntimeClass *pFirstClass;
CRuntimeClass *m_pNextClass;
};class CObject
{
public:
CObject(){
}
~CObject(){
}
virtual CRuntimeClass* GetRuntimeClass() const;
public:
static CRuntimeClass classCObject;
};struct AFX_CLASSINIT
{
AFX_CLASSINIT(CRuntimeClass *pNewClass);};
#define RUNTIME_CLASS(class_name) \
(&class_name::class##class_name)#define DECLARE_DYNAMIC(class_name) \
public: \
static CRuntimeClass class##class_name; \
virtual CRuntimeClass *GetRuntimeClass() const;#define _IMPLEMENT_RUNTIMECLASS(class_name,base_class_name,wSchema,pfnNew) \
static char _lpsz##class_name[] = #class_name; \
CRuntimeClass class_name::class##class_name = { \
_lpsz##class_name, sizeof(class_name), wSchema, pfnNew, RUNTIME_CLASS(base_class_name), NULL}; \
static AFX_CLASSINIT _init_##class_name(&class_name::class##class_name); \
CRuntimeClass *class_name::GetRuntimeClass() const \
{ return &class_name::class##class_name;}#define IMPLEMENT_DYNAMIC(class_name, base_class_name) \
_IMPLEMENT_RUNTIMECLASS(class_name,base_class_name,0xFFFF,NULL)class CCmdTarget : public CObject
{
DECLARE_DYNAMIC(CCmdTarget)
public:
CCmdTarget(){
}
~CCmdTarget(){
}
};class CWinThread : public CCmdTarget
{
DECLARE_DYNAMIC(CWinThread)
public:
CWinThread(){}
~CWinThread(){} virtual BOOL InitInstance (){
return TRUE;
}
virtual int Run()
{
return 1;}};class CWnd;class CWinApp : public CWinThread
{
DECLARE_DYNAMIC(CWinApp)
public:
CWinApp *m_pCurrentWinApp;
CWnd *m_pMainWnd;
public:
CWinApp(){
m_pCurrentWinApp = this;
}
~CWinApp(){
}
virtual BOOL InitApplication(){
return TRUE;}
virtual BOOL InitInstance()
{
return TRUE;
}
virtual int Run()
{
return CWinThread::Run();
}
};class CDocument : public CCmdTarget
{
DECLARE_DYNAMIC(CDocument)
public:
CDocument()
{
}
~CDocument()
{
}
};
class CWnd : public CCmdTarget
{
DECLARE_DYNAMIC(CWnd)
public:
CWnd()
{ }
~CWnd()
{
}
virtual BOOL Create();
BOOL CreateEX();
virtual BOOL PreCreateWindow();
};class CFrameWnd : public CWnd
{
DECLARE_DYNAMIC(CFrameWnd)
public:
CFrameWnd()
{
}
~CFrameWnd()
{ }
BOOL Create();
virtual BOOL PreCreateWindow();
};class CView : public CWnd
{
DECLARE_DYNAMIC(CView)
public:
CView()
{ }
~CView()
{ }
};
CWinApp *AfxGetApp();
class CMyWinApp : public CWinApp
{
public :
CMyWinApp(){};
~CMyWinApp(){};
virtual BOOL InitInstance ();
};class CMyFrameWnd:public CFrameWnd
{
public:
CMyFrameWnd();
~CMyFrameWnd(){};
};class CMyDoc : public CDocument
{
public :
CMyDoc()
{}
~CMyDoc()
{}
};class CMyView : public CView
{
public:
CMyView()
{
}
~CMyView()
{}
};
void PrintAllClasses();extern CMyWinApp theApp;static char szObject[] = "CObject";
struct CRuntimeClass CObject::classCObject = {
szObject,sizeof(CObject),0xffff,NULL,NULL,NULL};
static AFX_CLASSINIT _init_CObject(&CObject::classCObject);
CRuntimeClass* CRuntimeClass::pFirstClass = NULL; AFX_CLASSINIT::AFX_CLASSINIT(CRuntimeClass *pNewClass)
{
pNewClass->m_pNextClass = CRuntimeClass::pFirstClass;
CRuntimeClass::pFirstClass = pNewClass;
}CRuntimeClass *CObject::GetRuntimeClass()const
{
return &CObject::classCObject;
}BOOL CWnd::Create()
{
return TRUE;
}
BOOL CWnd::CreateEX()
{
PreCreateWindow();
return TRUE;
}BOOL CWnd::PreCreateWindow()
{
CreateEX();
return TRUE;
}BOOL CFrameWnd::Create()
{
CreateEX();
return TRUE;
}BOOL CFrameWnd::PreCreateWindow()
{
return TRUE;
}CWinApp *AfxGetApp()
{
return theApp.m_pCurrentWinApp;
}CMyWinApp theApp;
BOOL CMyWinApp::InitInstance()
{
m_pMainWnd = new CMyFrameWnd;
return TRUE;
}
CMyFrameWnd::CMyFrameWnd()
{
Create();
}void PrintAllClasses()
{
CRuntimeClass *pClass; for(pClass = CRuntimeClass::pFirstClass;pClass != NULL;pClass = pClass->m_pNextClass)
{
cout<<pClass->m_lpszClassName<<endl;
}
}IMPLEMENT_DYNAMIC(CCmdTarget,CObject)
IMPLEMENT_DYNAMIC(CWinThread,CCmdTarget)
IMPLEMENT_DYNAMIC(CWinApp,CWinThread)
IMPLEMENT_DYNAMIC(CWnd,CCmdTarget)
IMPLEMENT_DYNAMIC(CFrameWnd,CWnd)
IMPLEMENT_DYNAMIC(CDocument,CCmdTarget)
IMPLEMENT_DYNAMIC(CView,CWnd)int main()
{
CWinApp *pApp = AfxGetApp();
pApp->InitApplication();
pApp->InitInstance();
PrintAllClasses();
return 0;
}