0

我正在用 C++ 编写几个类,这些类覆盖了常见的 SDL 2 函数。

A 类保存 SDL 窗口数据并对其进行操作

class A 
{
  protected:
    SDL_Window *window;

  public:
    SDL_Window* get_window(){ return window; }
};

B 类处理渲染器管理,需要访问 SDL 窗口数据

class B : public A
{
  private:
    ...
  public:
    /** 
        This is the functions that access 
        the window data
    */
    void create_renderer( int index, Uint32 flags );
};

void B::create_renderer( int index, Uint32 flags )
{

  /**
     Input window data:
      The window data from class A, see the section "I have tried:"
       To see what I have tried to do to get the window data
  */
  SDl_CreateRenderer( (Input window data ), index, flags );
}

问题是这样的,当我在函数 create_renderer() 中从 B 类中的 A 类访问窗口数据,然后将该窗口数据输入所需的函数( SDL_CreateRenderer( ... ) )时,我在 SDL_CreateRenderer( ...)。这是因为输入了错误的窗口数据地址。

我试过了:

this->window;
this->get_window();
window
get_window();

这些都导致段错误

问题是我无法让它访问窗口数据所在的内存位置。

当我运行调试器时,窗口数据的内存地址与使用我上面指定的方法时输入函数的内存地址不同。问题在于我试图获取窗口数据的方法。

我知道您通过使用函数参数将窗口数据输入 create_renderer() 但在项目的宏伟计划中这将是愚蠢的,因为这两个类被捆绑在一起并且会使用户做很多不必要的工作。

如何让 B 类访问 A 类中的窗口数据?

我如何访问 A 类和 B 类:

class Overlord
{
   A a;
   B b;
};

Overlord overlord;

overlord.b.create_renderer( -1, 0 );

这就是我如何访问 B 类和函数 create_renderer() 的基础知识。就像我说过的那样,A 类和 B 类是一个大类计划的一部分,超出了这个问题的范围。希望这可以帮助。

4

1 回答 1

0

你如何初始化你的window班级成员?这可能是问题的根源。

只是一个怀疑(或“心理调试”,正如 Raymond Chen 所说的那样),但是您是否有可能window在类的a成员中进行初始化Overlord,然后期望相同的window指针出现在 的b成员中Overlord?我不太清楚为什么Overlord必须同时包含Aand的实例B,因为B继承自A. 也许你误解了 C++ 中数据成员的继承是如何工作的?

于 2012-07-30T15:19:14.800 回答