I am trying to compile this code:
class OthelloState {
public: // constructor
Othello(int r, int c);
/* other stuff */
private: // private data
const int rows;
const int columns;
int board[rows][columns];
}
I keep ending up with:
OthelloState.h:109: error: invalid use of non-static data member 'OthelloState::rows'
OthelloState.h:115: error: from this location
OthelloState.h:115: error: array bound is not an integer constant
OthelloState.h:112: error: invalid use of non-static data member 'OthelloState::columns'
OthelloState.h:115: error: from this location
OthelloState.h:115: error: array bound is not an integer constant
I assume that this means I have to make rows and columns static. But if I make them static, I cannot initialize either with from a constructor, the way I have to for this project…
Is there some other way I can do this?
PS: I know that in real Othello, the board is a square 8 by 8 grid…But after considering how long it would take the computer to generate the next best move on a partial 8 by 8 grid, we are not going to play with “real” Othello board (i.e. no predefined board sizes).
In C++, variable length arrays are not allowed.
board[][]needs to know both of its dimensions at compile time. You can usevector<vector<int> > board;, if you want to initializerowandcolat runtime.Other solution:
Suppose you know
rowsandcolsat compile time then you can usetemplate. That is as good as initializingrowandcolin constructor.Usage: