与枚举相关的C ++ LNK2005错误

时间:2016-12-31 19:53:30

标签: c++ visual-c++ enums lnk2005

由于在头文件中使用了枚举,我得到LNK错误2005。我不确定它有什么问题。枚举通常包含在头文件中吗?

这是我的代码。我有4个文件: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() {
}

我得到的错误是

  

错误LNK2005&#34; enum PieceType(* board_data)[6]&#34;   (?board_data @@ 3PAY05W4PieceType @@ A)已在board.obj中定义

谢谢!

1 个答案:

答案 0 :(得分:2)

问题与在标题中包含定义有关。这一行

PieceType board_data[NUM_ROWS][NUM_COLS];

在每个包含标题的翻译单元中定义一个新数组board_data。要解决此问题,请将数组声明为外部,即

extern PieceType board_data[NUM_ROWS][NUM_COLS];

之后,在您的一个CPP文件中定义数组。

注意:此问题与enum无关 - 您可能会遇到与其他任何类型相同的错误。