Я пытаюсь создать шахматную программу, но я хочу иметь возможность реализовывать в ней различные ИИ. Таким образом, я сделал абстрактный AIgeneric класс и производный класс AIrandom от AIgeneric. Затем в моем интерфейсе chessAI я создаю список ИИ и пытаюсь вызвать их функцию getNextMove и запустить segfault. Код выглядит следующим образом:Вызов виртуального метода производного класса вызывает segfaults
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
}
Было бы здорово, если бы кто-нибудь мог помочь мне в решении этой проблемы!
Редактировать: Я устанавливаю selectedAI в 0 перед вызовом getNextMove.
Да, это решило это. Благодаря! –