我剛加入這個了不起的社區,爲一個非常惱人的問題得到了答案。 我正在試圖用FLTK創建一個五連勝的遊戲。目前,我正在爲其井號版本打井。 所以我的問題是: 我從許多按鈕創建一個板。對於tic tac腳趾,該板僅有9個按鈕。但對於連續五個,它是15 * 15,所以它是225個按鈕。真正的問題在我必須定義所有回調函數時開始。那麼有沒有一種方法可以讓它們都只有一個回調函數?我可以爲按鈕分配一個值,以便回調函數在調用回調時知道哪個按鈕被按下了? 非常感謝你的人誰讀它:)C++ FLTK(具有相同回調函數的更多按鈕)
編輯
於是,我就往前走一步,並保存所有的指針指向按鈕在載體中。
vector <Fl_Button *> pointerVec;
/////////the button grid for the board ///////
int counter = 0;
int width = 50, height = 50;
int rowmax = 15, colmax = 15;
for (int rr = 0; rr < 3; ++rr) {
for (int cc = 0; cc < 3; ++cc) {
Fl_Button* bgrid = new Fl_Button(cc * width+80, rr * height+80, width - 5, width - 5);
int rowcol = counter;
pointerVec.push_back(bgrid); //save pointers to the buttons
bgrid->callback(_playerMove_cb, (void*) rowcol);
counter++;
}
}
////////
//then I tried to pass the vector to a callback function by reference
getAi->callback(getAI_cb, (void*)&pointerVec);
///////
static void getAI_cb(Fl_Widget *w, void *client) {
vector<Fl_Button*> &v = *reinterpret_cast<vector<Fl_Button*> *>(client);
// i wanted to do this //
v[1]->color(FL_RED);
}
因此,當我這樣做,程序崩潰。我打印出2個向量的內存地址,它們位於不同的地址。 有什麼我做錯了嗎? 我想這樣做的原因是因爲我想爲電腦播放器移動的按鈕着色。
回調的第一個參數是Widget,第二個參數是void *。如果您將userdata存儲在按鈕中,則回調可以提取此數據以確定它是哪個按鈕。讓我們知道你是否需要一個例子。 – cup
你好,謝謝你的回覆。如果你不介意你能給我一個小例子嗎?非常感謝你 – firax
重新編輯:它看起來像是在某處發生了腐敗。 w的地址與getAI相同嗎?如果不是,那麼別的東西就是調用例程。 – cup