一般的な SDL 2 関数へのオーバーレイである C++ でいくつかのクラスを作成しています。
クラス A は SDL ウィンドウ データを保持し、それを操作します。
class A
{
protected:
SDL_Window *window;
public:
SDL_Window* get_window(){ return window; }
};
クラス B は Renderer の管理を処理し、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( で segfault が発生することです。 ...)。これは、ウィンドウ データの間違ったアドレスがフィードされているためです。
私が試してみました:
this->window;
this->get_window();
window
get_window();
これらはすべてセグメンテーション違反になります
問題は、ウィンドウデータがあるメモリの場所にアクセスできないことです。
デバッガーを実行すると、ウィンドウ データのメモリ アドレスが、上記で指定したメソッドを使用したときに関数にフィードされるアドレスとは異なります。問題は、ウィンドウ データを取得しようとしている方法にあります。
関数の引数を使用してウィンドウ データを create_renderer() にフィードすることは知っていますが、プロジェクトの壮大なスキームでは、2 つのクラスが結び付けられており、ユーザーに多くの不要な作業を行わせるため、これはばかげています。
クラス B をクラス A のウィンドウ データにアクセスさせるにはどうすればよいですか?
クラスAとBにアクセスする方法:
class Overlord
{
A a;
B b;
};
Overlord overlord;
overlord.b.create_renderer( -1, 0 );
これが、クラス B と関数 create_renderer() にアクセスする方法の基本です。私が言ったように、クラス A とクラス B は、この質問の範囲外の大きなクラス スキームの一部です。お役に立てれば。