C++ 家长与家长之间的静态变量;儿童班

C++ 家长与家长之间的静态变量;儿童班,c++,visual-studio-2013,C++,Visual Studio 2013,我试图让父类有一个变量,然后该类将能够将该变量设置为它想要的任何值 然后在这个类中会有另一个类,我希望它能够访问这个变量,所以两者都可以读/写任何东西,并且它将来自同一个源 (本例中的变量是Irrlicht中的IVideoDriver*,因此,如果需要的话,可以使用指向驱动程序的指针) 我已经尝试了很多方法,在父类上公开将其设置为static。 这只会给我链接错误,这告诉我什么(除了它不工作) 我也试过这样的方法: class Parentclass { public: IVide

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

然后在这个类中会有另一个类,我希望它能够访问这个变量,所以两者都可以读/写任何东西,并且它将来自同一个源

(本例中的变量是Irrlicht中的IVideoDriver*,因此,如果需要的话,可以使用指向驱动程序的指针)

我已经尝试了很多方法,在父类上公开将其设置为static。 这只会给我链接错误,这告诉我什么(除了它不工作)

我也试过这样的方法:

   class Parentclass
{
public:
    IVideoDriver* driver;

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

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

那么我在这里错过了什么

更新:

下面是一个例子,说明了当使用Static时什么不起作用,它只是抱怨链接问题

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

     class TailClass
     {
     public:
     };

};

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

链接错误可能是因为您没有初始化静态变量,在cpp文件中,您应该执行以下操作:

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

链接错误可能是因为您没有初始化静态变量,在cpp文件中,您应该执行以下操作:

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

我很确定我知道你的问题是什么,尽管我希望我不会太晚。我对此有一些经验,您应该做的是创建一个包含所有irrlicht变量的类,然后对该类进行另一个声明,以便您可以在任何地方访问它们。(我说的这些令人困惑的话已经够多了,下面是代码。)

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

class MyIrr
{
public:
static MyIrr* myirr;
static IVideoDriver* driver;
}
在cpp文件中定义变量(如swang所说)

然后你应该能够在任何其他类中包含MyIrr.h并访问驱动程序,我知道这与你最初的问题不同,但这是一个解决方法

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

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

我很确定我知道你的问题是什么,尽管我希望我不会太晚。我对此有一些经验,您应该做的是创建一个包含所有irrlicht变量的类,然后对该类进行另一个声明,以便您可以在任何地方访问它们。(我说的这些令人困惑的话已经够多了,下面是代码。)

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

class MyIrr
{
public:
static MyIrr* myirr;
static IVideoDriver* driver;
}
在cpp文件中定义变量(如swang所说)

然后你应该能够在任何其他类中包含MyIrr.h并访问驱动程序,我知道这与你最初的问题不同,但这是一个解决方法

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

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

有趣的是,你说的都是
静态的
,而这个关键字在你的代码中甚至一次也没有出现。您没有在代码的任何地方显示初始化指针的部分,因此我们只能假设您没有初始化它,因此,您所说的“指针损坏”是什么意思???它首先处于“已损坏”状态(即垃圾)。是否希望子类成为父类的成员?还是希望子类从父类继承?在第二种情况下,子类将自动访问
公共静态成员。正如我在文本中所述,我使用了静态。指针在主文件的类之外初始化。然后我通过父类的构造函数链接它,它基本上就是这样做的(ParentclassDriver=MainDriver)。所以它只是指向另一个指针(如果可以使它更平滑,那就太好了)。指针损坏只是一种假设,但父类中的指针指向原始指针,因此不会出错。它的运行与预测完全一样。@ EngChists不知道你是什么意思,作为父类的成员(不太好的类,新的C++)。但我只是想让它作为一个全局变量工作。两个类都可以访问同一个源。如果它是一个int,两个都可以,GlobalInt=10,这两个类都会改变。@barakmanos,我刚刚试过,正常的东西似乎都能工作。例如,static int可以很好地工作。所以它一定是与IVideoDriver有关,可能与它来自共享库有关吗?有趣的是,你说的都是
静态
,而这个关键字在你的代码中甚至没有出现一次。您没有在代码的任何地方显示初始化指针的部分,因此我们只能假设您没有初始化它,因此,您所说的“指针损坏”是什么意思???它首先处于“已损坏”状态(即垃圾)。是否希望子类成为父类的成员?还是希望子类从父类继承?在第二种情况下,子类将自动访问
公共静态成员。正如我在文本中所述,我使用了静态。指针在主文件的类之外初始化。然后我通过父类的构造函数链接它,它基本上就是这样做的(ParentclassDriver=MainDriver)。所以它只是指向另一个指针(如果可以使它更平滑,那就太好了)。指针损坏只是一种假设,但父类中的指针指向原始指针,因此不会出错。它的运行与预测完全一样。@ EngChists不知道你是什么意思,作为父类的成员(不太好的类,新的C++)。但我只是想让它作为一个全局变量工作。两个类都可以访问同一个源。如果它是一个int,两个都可以,GlobalInt=10,这两个类都会改变。@barakmanos,我刚刚试过,正常的东西似乎都能工作。例如,static int可以很好地工作。所以它一定是与IVideoDriver有关,它是否与它来自共享库有关