访问类成员指针

时间:2012-07-30 00:17:25

标签: c++ class pointers sdl

我正在用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();

这些都导致了段错误

问题在于,如果窗口数据位于,则无法访问内存位置。

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

我知道你通过使用函数参数将窗口数据提供给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类是大类方案的一部分,超出了这个问题的范围。希望这会有所帮助。

1 个答案:

答案 0 :(得分:0)

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

只是怀疑(或“通灵调试”,as Raymond Chen would call it),但您是否有可能在window类的a成员中初始化Overlord ,然后期望相同的window指针显示在b成员Overlord中?我不清楚为什么Overlord必须包含AB的实例,因为B继承自A。也许你误解了数据成员的继承如何在C ++中运行?