我试图让Parent类有一个变量,然后该类将能够将该变量设置为它想要的任何值。
然后在那个类中会有另一个我想要访问该变量的类,所以它们都可以读/写任何东西,它将来自同一个源。
(在这种情况下,变量是来自Irrlicht的IVideoDriver *,所以如果重要的话,指向驱动程序的指针。)
我尝试过很多东西,在父类中公开设置为静态。 这只能给我链接错误,这些错误告诉我什么(除了它不起作用)。
我也试过这样的事情:
class Parentclass
{
public:
IVideoDriver* driver;
class Childclass
{
iVideoDriver* ddriver = Parentclass::driver;
}
}
这只会在Childclass尝试使用它时给出错误。我想是的,因为指针已被破坏,因为它指向可能已发生变化的东西。
那么我在这里缺少什么?
更新:
以下是使用Static时不起作用的示例,它只是抱怨链接问题。
class PlayerClass
{
public:
PlayerClass(IVideoDriver*,SColor, int, int);
static IVideoDriver* driver;
public:
class TailClass
{
public:
};
};
//从与代码无关的代码中删除了很多内容。
答案 0 :(得分:2)
链接错误可能是抱怨你没有初始化静态变量,在cpp文件中你应该这样做:
IVideoDriver* PlayerClass::driver = new IVideoDriver(/*whatever parameters*/);
答案 1 :(得分:2)
我很确定我知道你的问题是什么,虽然我希望我不会太迟。我对此有一些经验,你应该做的只是有一个包含所有irrlicht变量的类,然后再创建该类的另一个声明,以便你可以在任何地方访问它们。 (足够令人困惑的谈话,这是代码。)
在.h文件中将所需变量定义为静态:
class MyIrr
{
public:
static MyIrr* myirr;
static IVideoDriver* driver;
}
在cpp文件中定义变量(如swang所说)
#include "MyIrr.h"
MyIrr* MyIrr::myirr;
IVideoDriver* MyIrr::driver;
然后你应该能够在任何其他类中包含MyIrr.h并访问驱动程序,我知道它与你原来的问题有所不同,但它是一个解决方法。
//In a random cpp file
#include "MyIrr.h"
void Something(){
MyIrr::driver->beginScene(true, true, video::SColor(255, 200, 200, 200));
}