父母和家庭中的静态变量儿童班

时间:2015-02-14 21:47:16

标签: c++ visual-studio-2013

我试图让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:
     };

};

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

2 个答案:

答案 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));
}