char board[N][N]
не является C ++, когда N не является постоянной времени компиляции.Это расширение от gcc, которое действительно не должно быть включено по умолчанию.
Вы не определяете функции, которые принимают (стиль C) массивы массивов char, но вместо этого они принимают то, что не определено в стандарте.C ++ и ведут себя иначе, чем в C.
Вместо этого вы должны определить какой-то другой тип в качестве вашей доски, например using Board = std::vector<std::vector<char>>;
.Затем вы можете передать (ссылки на) этот тип.
#include <iostream>
#include <vector>
using Board = std::vector<std::vector<char>>;
bool safe(const Board & board, int row, int col)
{
//checks if it's safe to place a queen
//doesn't give me any errors
}
bool placeQueen(Board & board, int col)
{
for (int i = 0; i < N; i++)
{
if (safe(board, i, col) )
{
board[i][col] = 1;
if ( placeQueen(board, col + 1) ){
return true;
}
board[i][col] = 0;
}
}
return false;
}
void printAnswer(const Board & board){
//prints the final answer
}
int main()
{
std::cout << "Enter the number of queens: ";
int N;
std::cin >> N;
Board board{N, {N, '.'}}; // Initialise N vectors of N '.'
if (!placeQueen(board, 0))
{
std::cout << "Solution does not exist.";
return 0;
}
printAnswer(board);
return 0;
}