C++ LNK2005 error related to enum

1.2k views Asked by At

I am getting LNK error 2005 due to the use of enum in header file. I am not sure what is wrong with it though. Is enum usually included in the header file?

Here is my code. I have 4 files: board.h, board.cpp, Solitaire.h, Solitaire.cpp.

board.h:

#ifndef BOARD_H__
#define BOARD_H__
#include <iostream>
using namespace std;
const int NUM_ROWS = 6;
const int NUM_COLS = 6;
enum PieceType {
HasPiece, NoPiece, Invalid
};
PieceType board_data[NUM_ROWS][NUM_COLS];
#endif

board.cpp:

#include "board.h"

Solitaire.h

#ifndef Solitaire_h__
#define Solitaire_h__
#include "board.h"
#endif

Solitaire.cpp

#include "Solitaire.h"
int main() {
}

The error I get is

Error LNK2005 "enum PieceType (* board_data)[6]" (?board_data@@3PAY05W4PieceType@@A) already defined in board.obj

Thank you!

1

There are 1 answers

0
Sergey Kalinichenko On

The problem has to do with including definitions in headers. This line

PieceType board_data[NUM_ROWS][NUM_COLS];

defines a new array board_data in each translation unit from which the header is included. To fix this issue, declare the array external, i.e.

extern PieceType board_data[NUM_ROWS][NUM_COLS];

After that, define the array in one of your CPP files.

Note: This problem is not about enum - you would get the same error with any other type.