访问类成员指针

Access class member pointer

本文关键字:指针 成员 访问      更新时间:2023-10-16

我正在用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_CreateRender(…)中得到一个segfault。这是因为窗口数据的错误地址被馈送到它中。

我试过:

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

这些都导致了segfault

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

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

我知道您通过使用函数参数将窗口数据输入create_render(),但在项目的总体方案中,这将是愚蠢的,因为这两个类被绑定在一起,会让用户做很多不必要的工作。

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

我如何访问A类和B类:

class Overlord
{
   A a;
   B b;
};
Overlord overlord;
overlord.b.create_renderer( -1, 0 );

这是我如何访问类B和函数create_render()的基础。正如我所说,A类和B类是一个大型班级计划的一部分,不在这个问题的范围内。希望这能有所帮助。

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

这只是一种怀疑(或者Raymond Chen称之为"心理调试"),但您是否有可能在Overlord类的a成员中初始化window,然后期望相同的window指针出现在Overlordb成员中?我不太清楚为什么Overlord必须同时包含AB的实例,因为B继承自A。也许您误解了数据成员的继承在C++中是如何工作的?