公共5个文件,RuntimeClass中超前使用CObject 类
lib.h
RuntimeClass.h
RuntimeClass.cpp
Object.h
Object.cpp
1、lib.h /*设置为预编译头文件或者include在stdafx.h中*/
#include <RuntimeClass.h>
#include <Object.h>
2、RuntimeClass.h
namespace Frame{
class CObject;
};
struct CRuntimeClass
{
// Attributes
LPCSTR m_lpszClassName;
int m_nObjectSize;
UINT m_wSchema; // schema number of the loaded class
CObject* (PASCAL* m_pfnCreateObject)(); // NULL => abstract class
CRuntimeClass* m_pBaseClass;
CObject* CreateObject();
static CRuntimeClass* PASCAL Load(const char* pszClassName);
// CRuntimeClass objects linked together in simple list
static CRuntimeClass* pFirstClass; // start of class list
CRuntimeClass* m_pNextClass; // linked list of registered classes
};
其中超前引用了名称空间Frame中的CObject
3、RuntimeClass.cpp
#include "RuntimeClass.h"
4、Object.h
namespace Frame
{
class FRAME_API CObject
{
public:
CObject(void);
~CObject(void);
public:
virtual CRuntimeClass* GetRuntimeClass() const;
BOOL IsKindOf(const CRuntimeClass* pClass) const;
public:
static CRuntimeClass classCObject;
virtual void SayHello() { OutputDebugStringA("CObject say hello!\n"); }
};
}
5、Object.cpp
#include "RuntimeClass.h"
#include "Object.h"
重点是CRuntimeClass超前引用了CObject,不要在其头文件加入#include "object.h",只需要加入以下代码即可
namespace Frame{
class CObject;
};
看,这就解决了超前引用!!!