C++ 在何处声明要使用它的对象(fltk)

C++ 在何处声明要使用它的对象(fltk),c++,heap-memory,fltk,stack-memory,C++,Heap Memory,Fltk,Stack Memory,我在访问fltk中的对象或其方法时遇到问题。 我有一个名为MyWindow的类,它是Fl_Window的子类。 所以基本上我想使用一个对象,它要么在main部分声明为int,要么在private部分声明为Mywindow。我的问题是我不能那样使用它。它只允许我使用声明为全局的对象。我可以这样把它放在堆上吗:Classname*pointer=newclassname?如果可以的话,我在哪里做? 如果在回调中需要该对象或其函数,回调函数将如何工作? 我应该在回调参数中使用指向它的指针吗? 假设我想

我在访问fltk中的对象或其方法时遇到问题。 我有一个名为MyWindow的类,它是Fl_Window的子类。 所以基本上我想使用一个对象,它要么在main部分声明为int,要么在private部分声明为Mywindow。我的问题是我不能那样使用它。它只允许我使用声明为全局的对象。我可以这样把它放在堆上吗:Classname*pointer=newclassname?如果可以的话,我在哪里做? 如果在回调中需要该对象或其函数,回调函数将如何工作? 我应该在回调参数中使用指向它的指针吗? 假设我想点击按钮,我需要它对对象做一些事情并更改一个值。 很多问题我都知道,我真的迷路了。
有人能告诉我正确的方向吗?谢谢

向GUI传递数据的简单案例

class MyData
{
    // The data model
};

class MyWindow: public FL_Window
{
    MyData* m_data;
public:
    void Data(MyData* data) { m_data = data; }
    ...
};

int main()
{
    MyWindow gui;
    MyData data;

    // Tell the gui about the data
    gui.Data(data);
    ...
    // Setup the dialog
    gui.begin();
    ...
    gui.end();
    gui.show();
    return FL::run();
}
对于回调,分两个阶段进行

class NeedingACallback
{
public:
    void Setup()
    {
        ...
        FL_xxx* w = new FL_xxx(xpos, ypos, wid, hgt, name);
        ...
        //                    v Pass the instance to the static
        w->callback(_EventCB, this);
    }

    // The callback
    static void _EventCB(FL_Widget* w, void* client)
    {
        // Convert the void* back to the instance
        NeedingACallback* self = reinterpret_cast<NeedingACallback*>(client);
        self->EventCB();
    }

    // Make life simple so you don't have to put self-> in front of
    // all the instance data accessed
    void EventCB()
    {
        // Callback for this instance of the class
    }
};

非常感谢你!!!它有效!!!!唯一的问题是它的代码有点难看:D。但我猜这是因为FLTK比C++更为C。感谢您的帮助、代码和时间。这真的帮了我很大的忙!!唯一的问题是,如果我用函数更改某些内容,它不会保存更改。所以我可以做的功能,但没有得到保存。例如,我设置了播放器,他们得到一个标记X或O,它被推回向量中,但当我调用getMark函数时,它返回一个随机字符,因此我认为它复制了对象,执行了要求的函数,然后删除了对象。为什么globals这么简单,而如果处理得当又那么困难?您是通过值、引用还是指针传递数据?我想我都试过了,但不确定是否正确。我首先尝试使用您的方法,设置指向main中对象的指针。类MyWindow:public FL_Window{MyData*m_data;public:void DataMyData*data{m_data=data;}…};然后我试着像这个void DataMyData&data{m_data=data}然后我试着像这个void DataMyData{m_data=data}它们都不起作用。我想我做错了什么我想你有两个数据实例。看一下另一种技术上的编辑
class MyWindow: public FL_Window
{
    MyData& m_data;
public:
    MyWindow(int wid, int hgt, MyData& data, const char* title=0)
   : FL_Window(wid,hgt,title)
   , m_data(data)
    {
    ...
    }
};

int main()
{
    MyData data;
    MyWindow gui(100, 100, data, "Call me Mr");

    ...
    // Setup the dialog
    gui.begin();
    ...
    gui.end();
    gui.show();
    return FL::run();
}