我正在尝试制作一个国际象棋程序,但我希望能够在其中实现不同的 AI。因此,我创建了一个抽象的 AIgeneric 类和 AIgeneric 的派生类 AIrandom。然后在我的 chessAI 界面中,我创建了一个 AI 列表,并尝试调用它们的 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。