Ваша ошибка указывает на то, что параметры 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);
}