C ++通过继承隐藏变量?

时间:2013-08-04 22:31:48

标签: c++ inheritance static-members

我正在编写一个游戏引擎,我正在尝试将其所有功能隐藏起来并且大部分都是无规则的,因此当程序员编写游戏代码时,他们不会为某些事情需要如何或为何需要这样或者另一个,我试图坚持将其完全保留为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;
};

但是我收到了“静态ResourceModule * resourceModuleAddress”行的未解决的外部错误,我无法使“friend”关键字起作用(它还说该变量是私有的)并且无法访问。)

有关如何完成我正在尝试的内容的任何建议,或者我如何才能使上述代码正常工作?

1 个答案:

答案 0 :(得分:4)

未解决的外部错误来自缺少静态成员的定义。解决方案:Initializing private static members