首页 > 解决方案 > fltk1.3 有时会添加自定义小部件

问题描述

我的 Fl_Window 不会自动添加我定制的 Fl_Widget ......但只是有时。下面是它的工作原理:

Fl_Window 会自动添加这个 Fl_Widget:

//Menu version 1
class Menu : public Fl_Menu_Bar
{
public:
    Menu(int x, int y, int w, int h, const char* l=0)
        : Fl_Menu_Bar(x, y, w, h, l) {}
//...
};
//...

Fl_Window不会自动添加这个 Fl_Widget:

//Menu version 2
class Menu : public Fl_Menu_Bar
{
public:
    Menu()
        : Fl_Menu_Bar(0,0,800,30) {}
//...
};
//...

这是我运行它的方式:

版本 1

//main
Fl_Window win(800,600);

//This will be added automatically
Menu m1(0,0,800,30);

win.show();
win.end();

return Fl::run();
//...

第 2 版

//main
Fl_Window win(800,600);

//This will not be added automatically.
Menu m2();

win.show();
win.end();

return Fl::run();
//...

要编译(我使用的是 ubuntu),我使用

g++ main.cpp Menu.cpp -lfltk -lfltk_images

为什么我的菜单的版本 1 自动添加到win中,而不是版本 2?特别是,我怎样才能将我的类对象添加到 Fl_Window 而不管其构造函数的外观如何?

文档中提到了这一点,但似乎差异仅在使用 FLUID 时才相关(我不是)。

标签: c++fltk

解决方案


我隐约记得这是一些特殊的 C++ 行为:如果您使用默认构造函数,请不要在变量声明中指定括号(因为这有一些特殊含义),换句话说,而不是:

Menu m2();

写吧:

Menu m2;

推荐阅读