0

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

这是我的代码。我有 4 个文件:board.h、board.cpp、Solitaire.h、Solitaire.cpp。

板.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

板子.cpp:

#include "board.h"

接龙.h

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

接龙.cpp

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

我得到的错误是

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

谢谢!

4

1 回答 1

3

问题与在标题中包含定义有关。这条线

PieceType board_data[NUM_ROWS][NUM_COLS];

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

extern PieceType board_data[NUM_ROWS][NUM_COLS];

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

注意:这个问题不是关于enum- 你会得到与任何其他类型相同的错误。

于 2016-12-31T19:57:28.957 回答