您的错误表明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);
}