我正在用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类是大类方案的一部分,超出了这个问题的范围。希望这会有所帮助。
答案 0 :(得分:0)
如何初始化window
班级成员?这可能是问题的根源。
只是怀疑(或“通灵调试”,as Raymond Chen would call it),但您是否有可能在window
类的a
成员中初始化Overlord
,然后期望相同的window
指针显示在b
成员Overlord
中?我不清楚为什么Overlord
必须包含A
和B
的实例,因为B
继承自A
。也许你误解了数据成员的继承如何在C ++中运行?