访问类成员指针
Access class member pointer
我正在用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
指针出现在Overlord
的b
成员中?我不太清楚为什么Overlord
必须同时包含A
和B
的实例,因为B
继承自A
。也许您误解了数据成员的继承在C++中是如何工作的?
相关文章:
- 如果基类包含双指针成员,则派生类的构造函数
- C++正确的指针成员初始化
- 是否可以使用智能指针成员设置具有另一个结构的结构?
- 为什么 operator() 处的指针成员不起作用?
- 更改队列指针成员的值需要在 C++ 中出现奇怪的错误
- 如何从另一个嵌套类中调用某个封闭类的嵌套类的函数指针成员的值?
- 结构对象的指针成员在传递给函数时被修改
- 参数的混合值,当我调用指针成员函数时
- 如何正确使用结构的共享指针成员?
- C++:私有类指针成员返回未定义的值
- 在函数中传递带有指针成员的结构是浅拷贝或深拷贝在 C 中
- 包含指针成员的嵌套结构
- 在 c++ 中,为什么 -> 被称为二进制中缀指针成员访问运算符?
- C++ 类指针成员行为奇怪(错误)
- 常量结构的指针成员
- 在类C++指针成员中
- 指针成员未在复制构造函数中初始化
- C++移动拥有指针成员的构造函数
- C++ 包含唯一指针成员变量的类的赋值运算符
- 如何使用 QPoint 指针成员对类进行排队和取消排队