我試圖讓國際象棋程序,但我希望能夠在它來實現不同的認可。因此,我製作了一個抽象的AIgeneric類和AIgeneric的派生類AIrandom。然後在我的chessAI界面,我創建的認可名單,並試圖調用他們的getNextMove功能,並運行到段錯誤。代碼如下:調用派生類的虛方法會導致段錯誤
class AIgeneric {
public:
virtual int getNextMove(int*, const int &) = 0;
}
class AIrandom : public AIgeneric {
public:
AIrandom();
virtual int getNextMove(int*, const int &);
}
class chessAI {
public:
chessAI();
~chessAI();
void setAI();
int getNextMove(int*, const int &);
private:
vector<AIgeneric*> AIlist;
vector<string> names;
int selectedAI;
};
chessAI::chessAI() {
AIrandom randomAI;
AIlist.push_back(&randomAI);
names.push_back("Random AI");
selectedAI = -1;
}
int chessAI::getNextMove(int * board, const int & color) {
return AIlist[selectedAI]->getNextMove(board, color); //segfault on this line
}
這將是偉大的,如果有人可以幫助我解決這個問題!
編輯:我打電話getNextMove前還設置selectedAI爲0。
是的,這解決了它。謝謝! – 2013-03-11 09:27:57