0
代碼非常直截了當。如果沒有IDumb
並且我將dumbClass
直接傳遞給dumbWin
,代碼將起作用。但是當dumbClass具有IDumb接口時,代碼崩潰在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();
}
沒有工作。如果我在'dumbWin'的構造函數中調用'dc-> print()',它就可以工作。只有當我在回調中調用它時,它纔會失敗! – harsh
你能提供關於它如何崩潰的更多細節嗎?什麼是調用堆棧? – Arkadiy
我剛剛得到'segment fault(core dumped)'錯誤。有沒有辦法查看調用堆棧?我正在使用Eclipse – harsh