1

Xlib ライブラリのラッパー クラスを作成しようとしていますが、セグメンテーション エラーが発生します。私はC ++を初めて使用しますが、これはおそらく私の深さから外れており、その問題以外に私の目標が高く設定されている可能性があります。誰かがこのセグメンテーション違反が発生する理由を教えてもらえますか?
ソースファイル
ヘッダファイル
main.cpp

これは私が得るバックトレースだと思います:

Program received signal SIGSEGV, Segmentation fault.
In XMapWindow () (/usr/lib/libX11.so.6)
At /home/elliot/Programming/C and C++/XWindows/src/MyWindow.cpp:49
4

1 に答える 1

3

エラーは、displayまたはwindowパラメータのいずれかXMapWindow()が正しくないことを示しています。

特にとへの呼び出しの結果については、コードにさらにエラーチェックを含める必要がありXOpenDisplayますXCreateWindow

私が見ることができる唯一の明らかなエラーは、CWBackPixelフラグをに渡しているが、パラメーターを初期化していないXCreateWindowままにしていることです。attributesプレーンCとは異なり、C ++は、宣言されたときに構造体のメモリの内容をクリアしません。

編集-もちろん、私は本当に目がくらむほど明白なエラーを見逃しました-コンストラクター内のすべてのクラスメンバー変数を誤って再宣言しました。それがあなたのスコープの問題になります。コンストラクター内のすべての割り当てからタイプ名を削除する必要があります。例:

MyWindow::MyWindow()
{   //ctor
    display = XOpenDisplay(NULL);
    visual = XDefaultVisual(display, 0);
    depth = XDefaultDepth(display, 0);
    window = XCreateWindow(display, XRootWindow(display, 0), 0, 0, MyWindow::default_width, MyWindow::default_height, 16, depth, InputOutput, visual, CWBackPixel, &attributes);
    XStoreName(display, window, MyWindow::default_caption.c_str());
    XSelectInput(display, window, ExposureMask | KeyPressMask | KeyReleaseMask);
}
于 2011-02-13T17:45:48.717 に答える