父子之间的静态变量 Class

Static Variables Among Parent & Child Class

我试图让父 class 有一个变量,然后 class 将能够将该变量设置为它想要的任何值。

然后在那个 class 中会有另一个 class 我想访问那个变量,所以两者都可以 read/write 任何东西并且它将来自相同的来源。

(在这种情况下,变量是来自 Irrlicht 的 IVideoDriver*,因此如果重要的话,指向驱动程序的指针)。

我尝试了很多东西,在父 class 上的 public 中将其设置为静态。 这只会给我链接错误,但什么也没告诉我(除了它不起作用)。

我也试过这样的:

   class Parentclass
{
public:
    IVideoDriver* driver;

    class Childclass
    { 
    iVideoDriver* ddriver = Parentclass::driver;
    }

}

这只会在 Childclass 尝试使用它时出现错误。我猜这是因为指针被损坏了,因为它指向可能已经改变的东西。

那么我在这里错过了什么?

更新:

这是使用静态时不起作用的示例,它只是抱怨链接问题。

    class PlayerClass
{
public:
    PlayerClass(IVideoDriver*,SColor, int, int);
    static IVideoDriver* driver;
public:

     class TailClass
     {
     public:
     };

};

//从代码中删除了很多与问题无关的内容。

链接错误可能是抱怨你没有初始化静态变量,在cpp文件中你应该这样做:

IVideoDriver* PlayerClass::driver = new IVideoDriver(/*whatever parameters*/);

我很确定我知道你的问题是什么,但我希望我还不算太晚。我对此有一些经验,你应该做的就是拥有一个包含所有 irrlicht 变量的 class,然后再声明一个 class,这样你就可以在任何地方访问它们。 (我说的够多了,这是代码。)

在 .h 文件中将所需变量定义为静态变量:

class MyIrr
{
public:
static MyIrr* myirr;
static IVideoDriver* driver;
}

在cpp文件中定义变量(如swang所说)

#include "MyIrr.h"
MyIrr* MyIrr::myirr;
IVideoDriver* MyIrr::driver;

那么您应该可以在任何其他 class 中包含 MyIrr.h 并访问驱动程序,我知道它与您最初的问题不同,但它是一个解决方法。

//In a random cpp file
#include "MyIrr.h"

void Something(){
MyIrr::driver->beginScene(true, true, video::SColor(255, 200, 200, 200));
}