Ваша ошибка указывает на то, что параметры display
или window
для XMapWindow()
были неверными.
Вам необходимо включить в свой код дополнительную проверку ошибок, в частности, для результатов вызовов XOpenDisplay
и XCreateWindow
.
Единственная очевидная ошибка, которую я вижу, это то, что вы передаете флаг CWBackPixel
в XCreateWindow
, но оставляете параметр attributes
неинициализированным. В отличие от обычного C, C++ не очищает содержимое памяти структур при их объявлении.
EDIT - я, конечно, пропустил действительно ослепительно очевидную ошибку - вы непреднамеренно повторно объявили все переменные-члены ваших классов в своем конструкторе. Это будет ваша проблема масштаба. Вам нужно удалить имена типов из всех назначений в конструкторе, например:
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);
}
person
Alnitak
schedule
13.02.2011
-g
при использовании g++), а затем запустив ее в отладчике (например,gdb a.out
, затем введитеrun
и после сбояbt
, чтобы получить обратную трассировку). - person svens   schedule 13.02.2011