gpt4 book ai didi

c++ - 回调函数中的接口(interface)类导致崩溃

转载 作者:行者123 更新时间:2023-11-28 07:10:51 28 4
gpt4 key购买 nike

代码非常简单。如果没有 IDumb 并且我将 dumbClass 直接传递给 dumbWin,则代码有效。但是当 dumbClass 有 IDumb 接口(interface)时,代码在 print() 处崩溃。

using namespace std;

class IDumb {
public :
virtual void print() = 0;
};

class dumbClass : public IDumb {
public :
void print() {
cout << "this is dumb class" << endl;
}
};

class dumbWin : public Fl_Window {
IDumb *dc;
public:
dumbWin(IDumb *dc) : Fl_Window(100, 100, "win") {
Fl_Button *b = new Fl_Button(10, 10, 50, 25, "OK");
b->callback((Fl_Callback*)callbk, this);
end();

this->dc = dc;
}

void print() {
dc->print();
}

static void callbk(void *p) {
cout << "OK" << endl;
((dumbWin*)p)->print();
}
};

int main(int argc, char **argv)
{
IDumb *dC = new dumbClass();
dumbWin *dW = new dumbWin(dC);
dW->show();

return Fl::run();
}

最佳答案

在设置this->dc 之前调用call b->callback。那会有问题吗?你最好进行成员初始化:

dumbWin(IDumb *dc) : Fl_Window(100, 100, "win"), dc(dc) 

此外,为 IDumb 提供一个虚拟析构函数。

关于c++ - 回调函数中的接口(interface)类导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20997705/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com