Trouble Declaring 3D Array in Header File

F

free2klim

Hi,
I am relatively new to programming C++ and I am writing a small program
in which I am using a 3D array of type int. The 3D array is a member
of class GameBoard, which I have defined in the GameBoard.h header file
as follows:

class GameBoard {

//function prototypes
public:
GameBoard();
int getMovePeg();
void readMovePeg();
void readDestPeg();
void makeMove();
bool gameOverCheck();
void endGame();
void displayBoard();
private:
bool peg;
int movePeg, destPeg, jumpPeg, movesTaken, leftPegs;

//HERE IS THE DECLARATION FOR THE ARRAY
int holes[15][5][2];

void initHoles();
string printHole(int);
};

I then
#include "GameBoard.h"
in the GameBoard.cpp file. Then I try to do this with the array:

GameBoard::holes = {{{0,0},{1,3},{2,5},{0,0},{0,0}}, //hole 0

{{0,0},{3,6},{4,8},{0,0},{0,0}}, //hole 1
{{0,0},{4,7},{5,9},{0,0},{0,0}}, //hole 2
{{0,0},{1,0},{4,5},{6,10},{7,12}}, //hole 3
{{0,0},{7,11},{8,13},{0,0},{0,0}}, //hole 4
{{0,0},{2,0},{4,3},{8,12},{9,14}}, //hole 5
{{0,0},{3,1},{7,8},{0,0},{0,0}}, //hole 6
{{0,0},{4,2},{8,9},{0,0},{0,0}}, //hole 7
{{0,0},{4,1},{7,6},{0,0},{0,0}}, //hole 8
{{0,0},{5,2},{8,7},{0,0},{0,0}}, //hole 9
{{0,0},{6,3},{11,12},{0,0},{0,0}}, //hole 10
{{0,0},{7,4},{12,13},{0,0},{0,0}}, //hole 11
{{0,0},{7,3},{8,5},{11,10},{13,14}}, //hole 12
{{0,0},{8,4},{12,11},{0,0},{0,0}}, //hole 13
{{0,0},{9,5},{13,12},{0,0},{0,0}}}; //hole 14

I get this error:

"error C2761: 'int GameBoard::holes[15][5][2]' : member function
redeclaration not allowed"

What am I doing wrong? I have tried everything I could think of to get
this array to work. Thanks in advance for any help that anyone can
offer! If I need to provide any more code or explanation, please let
me know.

Brian
 
J

joosteto

free2klim said:
Hi, y:

int GameBoard::holes = {{{0,0},{1,3},{2,5},{0,0},{0,0}},

^I guess you forgot the "int" before the GameBoard there?
"error C2761: 'int GameBoard::holes[15][5][2]' : member function
redeclaration not allowed"

g++ often has more insightful error messages:

ref.cc:27: error: `int GameBoard::holes' is not a static member of
`class GameBoard'

Adding static to the declaration within the class (.h), g++ reports:

ref.cc:27: error: conflicting declaration 'int GameBoard::holes'
ref.cc:20: error: 'GameBoard::holes' has a previous declaration as `int
GameBoard::holes[15][5][2]'

So, the types mismatch, we'll have to add the [][][] to the declaration
too.
I ended up with:

class GameBoard{
...
int holes[15][5][2];
};
....
int GameBoard::holes[15][5][2] = {{{0,0},{1,3},{2,5},{0,0},{0,0}},


which compiles.
 
F

free2klim

g++ often has more insightful error messages:

ref.cc:27: error: `int GameBoard::holes' is not a static member of
`class GameBoard'

Adding static to the declaration within the class (.h), g++ reports:

ref.cc:27: error: conflicting declaration 'int GameBoard::holes'
ref.cc:20: error: 'GameBoard::holes' has a previous declaration as `int
GameBoard::holes[15][5][2]'

So, the types mismatch, we'll have to add the [][][] to the declaration
too.


Thank you very much! That worked! I ended up with this, just like you
said:

class GameBoard{
...
static int holes[15][5][2];
};
....
int GameBoard::holes[15][5][2] = {{{0,0},{1,3},{2,5},{0,0},{0,0}},
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,012
Latest member
RoxanneDzm

Latest Threads

Top