Im doing a invencible tic tac toe, but my minimax doesnt work -_- please I need to know where is my mistake, this is urgent

Code:

#include <algorithm>
#include <cstdlib>
using namespace std;
int cross;
int board[3][3] =
{
{0, 0, 0},
{0, 0, 0},
{0, 0, 0}
};
int winner( )
{
for (int player = -1; player <= 1; player += 2) {
for (int i = 0; i < 3; ++i) {
if (board[i][0] == player && board[i][1] == player && board[i][2] == player) {
return player;
}
if (board[0][i] == player && board[1][i] == player && board[2][i] == player) {
return player;
}
}
if (board[1][1] == player) {
if (board[0][0] == player && board[2][2] == player) {
return player;
}
if (board[2][0] == player && board[0][2] == player) {
return player;
}
}
}
return 0;
}
int best_move( )
{
if (cross > 0) {
int maxv = -2;
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
if (board[i][j] == 0) {
board[i][j] = cross;
cross = -cross;
maxv = max(maxv, best_move( ));
if (maxv == 1) {
return 1;
}
cross = -cross;
board[i][j] = 0;
}
}
}
return max(winner( ), maxv);
}
else {
int minv = 2;
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
if (board[i][j] == 0) {
board[i][j] = cross;
cross = -cross;
minv = min(minv, best_move( ));
if (minv == -1) {
return -1;
}
cross = -cross;
board[i][j] = 0;
}
}
}
return min(winner( ), minv);
}
}
int main( )
{
cross = 1;
int best_place;
int max_result = -2;
cross = 1;
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
if (board[i][j] == 0) {
board[i][j] = cross;
cross = -cross;
int res = max(winner( ), best_move( ));
if (max_result < res) {
best_place = (i * 3) + j;
max_result = res;
}
if (max_result == 1) {
return best_place;
}
cross = -cross;
board[i][j] = 0;
}
}
}
return best_place;
}

I want the cross to win, cross will always play first

cross = 1, round = -1, withouth mark/tie = 0

please