父子之间的静态变量 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));
}
我试图让父 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));
}