C++通过继承隐藏变量



我正在编写一个游戏引擎,我试图让它的所有功能都隐藏起来,而且基本上是无规则的,所以当程序员编写游戏时,他们不会关心某些东西需要如何或为什么这样或那样,我试着把它纯粹留给C++语言。

例如,我不希望他们:

//Going to create a new object on screen
Object* newObject = gameEngine.gameModels.NewObject(); //I don't want this

相反,我希望他们能够做到这一点:

//Going to create a new object on screen
Object* newObject = new Object(); 
newObject->Load("objectName"); //Done!

但为了实现这一点,我需要保留资源加载器的地址,这样我就可以调用适当的Load函数并进行实际加载,这就是我正在做的:

class BaseModel
{
    friend GameEngine;
    private:
        static ResourceModule* moduleAddress;
};
class Model : public BaseModel
{
    public:
        void Load(char* assetName) 
        {
            //use moduleAddress as needed 
        };
};
class GameEngine
{
    public:
        void Initialize()
        {
            myBaseModel.moduleAddress = &myResourceModule;
        }
    private:
        ResourceModule myResourceModule;
        BaseModel myBaseModel;
};

但是我在"static ResourceModule*resourceModuleAddress"行遇到了一个未解决的外部错误,我无法使"friend"关键字工作(它还表示变量是私有的,无法访问)。

关于如何完成我正在尝试做的事情,或者如何让这些代码正常工作,有什么建议吗?

未解决的外部错误来自于缺少静态成员的定义。此处的解决方案:初始化私有静态成员

最新更新