谈谈C++超前引用

公共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;
};


看,这就解决了超前引用!!!




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值