Visual c++ FLTK Fl_选择获取所选项目

Visual c++ FLTK Fl_选择获取所选项目,visual-c++,fltk,Visual C++,Fltk,我想获取所选的用户项,但在以下代码中出现错误: choice->value(); 希望你们能帮助我 Fl_Choice* choice; int i = 0; void but_cb(Fl_Button* obj, void*) { i = choice->value(); cout<<i; } int main (int argc, char* argv[]) {

我想获取所选的用户项,但在以下代码中出现错误:

choice->value(); 
希望你们能帮助我

    Fl_Choice*    choice;
    int    i   =   0;

    void but_cb(Fl_Button* obj, void*)
    {
        i = choice->value();
        cout<<i;
    }
    int main (int argc, char* argv[]) {
    Fl_Double_Window* win = new Fl_Double_Window(400,400,"Sample");
    win->begin();
    Fl_Choice* choice = new Fl_Choice(100,100,100,100,"Name");
    choice->add("Peter");
    choice->add("Tom");
    choice->add("Mary");
    Fl_Button* but = new Fl_Button(300,300,50,50,"Selected");
    but->callback((Fl_Callback*)but_cb);
    win->show();
    return (Fl::run());
}
Fl_选择*Choice;
int i=0;
无效但无效cb(Fl按钮*obj,无效*)
{
i=选择->值();
库塔德(“彼得”);
选择->添加(“Tom”);
选择->添加(“玛丽”);
Fl_按钮*但=新Fl_按钮(300300,50,50,“选定”);
但是->回调((Fl\u callback*)但是\u cb);
赢->秀();
返回(Fl::run());
}

我没有花太多时间阅读代码,因此下面经过修改和注释的代码可能无法解决您的问题。我相信
choice
中为空,但是当您在main()函数中重新定义choice时,会隐藏全局“choice”指针

Fl_Choice* choice;
int i = 0;

void but_cb(Fl_Button* obj, void*) {
    i = choice->value(); // uses global `choice` pointer to Fl_Choice.
    cout << i;
}

int main (int argc, char* argv[]) {
    Fl_Double_Window* win = new Fl_Double_Window(400,400,"Sample");
    win->begin();
        /* You are redefining choice here! BAD, because but_cb uses the global one.
        Fl_Choice* choice = new Fl_Choice(100,100,100,100,"Name");
        */

        // Good, assigns to the global `choice`, so it won't be NULL when but_cb is called
        choice = new Fl_Choice(100,100,100,100,"Name"); 

        choice->add("Peter");
        choice->add("Tom");
        choice->add("Mary");
        Fl_Button* but = new Fl_Button(300,300,50,50,"Selected");
        but->callback((Fl_Callback*)but_cb);
    win->show();
    return (Fl::run());
}
Fl_选择*Choice;
int i=0;
无效但无效cb(Fl按钮*obj,无效*){
i=choice->value();//使用全局'choice'指针指向Fl_选项。
无法开始();
/*你在这里重新定义选择!糟糕,因为CBU使用全局选择。
Fl_选项*选项=新Fl_选项(100100,“名称”);
*/
//很好,分配给全局'choice',因此调用but_cb时它不会为NULL
选择=新的Fl_选择(100100,“名称”);
选择->添加(“彼得”);
选择->添加(“Tom”);
选择->添加(“玛丽”);
Fl_按钮*但=新Fl_按钮(300300,50,50,“选定”);
但是->回调((Fl\u callback*)但是\u cb);
赢->秀();
返回(Fl::run());
}