Программирование. Принципы и практика использования C++ Исправленное издание, стр. 218
static void cb_next(Address, Address); static void cb_quit(Address, Address);};
Lines_window::Lines_window(Point xy,int w,int h, const string&title) :Window(xy,w,h,title), next_button(Point(x_max()–150,0),70,20, "Next point", cb_next), quit_button(Point(x_max()–70,0),70,20,"Quit",cb_quit), next_x(Point(x_max()–310,0),50,20,"next x:"), next_y(Point(x_max()–210,0),50,20,"next y:"), xy_out(Point(100,0),100,20,"current (x,y):") color_menu(Point(x_max()–70,30),70,20,Menu::vertical,"color"), menu_button(Point(x_max()–80,30),80,20, "color menu",cb_menu), { attach(next_button); attach(quit_button); attach(next_x); attach(next_y); attach(xy_out); xy_out.put("нет точек"); color_menu.attach(new Button(Point(0,0),0,0,"red",cb_red)); color_menu.attach(new Button(Point(0,0),0,0,"blue",cb_blue)); color_menu.attach(new Button(Point(0,0),0,0,"black",cb_black)); attach(color_menu); color_menu.hide(); attach(menu_button); attach(lines);}Обратите внимание на то, что инициализация выполняется в порядке определения данных-членов. Это правильный порядок инициализации. Фактически инициализация членов всегда происходит в порядке их объявления. Некоторые компиляторы выдают предупреждения, если конструктор базового класса или члена нарушает этот порядок.
16.8. Отладка программы графического пользовательского интерфейса
После того как программа графического пользовательского интерфейса начнет работать, ее отладка будет довольно простой: что видите, то и получите. Однако иногда возникает трудный фрустрационный период перед появлением первой фигуры или элемента управления окном и даже перед появлением самого окна на экране. Протестируем функцию
main()int main(){ Lines_window (Point(100,100),600,400,"lines"); return gui_main();}
• Тщательно исследовать части программы (классы, функции, библиотеки).
• Упростить все добавления, понемногу увеличивая объем программы, начиная с простейшей версии и тщательно отслеживая строку за строкой.
• Проверить все установки редактора связей.
• Сравнить ее с уже работающей программой.
• Объяснить код другу.
Итак, в чем же проблема? Вот правильная версия (см. раздел 16.5).
int main(){ Lines_window win(Point(100,100),600,400,"lines"); return gui_main();}Мы забыли указать имя
winLines_window
ShapeWidget