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

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

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

这是我的代码。我有 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

板.cpp:

#include "board.h"

接龙.h

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

纸牌.cpp

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

我得到的错误是

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

谢谢!

最佳答案

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

PieceType board_data[NUM_ROWS][NUM_COLS];

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

extern PieceType board_data[NUM_ROWS][NUM_COLS];

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

注意:这个问题与枚举无关——你会遇到与任何其他类型相同的错误。

关于与枚举相关的 C++ LNK2005 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41411294/

相关文章:

c++ - 如何扩展词法转换以支持枚举类型?

c++ - 如何使用rand随机模拟点击

c++ - STL 库 :I am new to STL library and facing compilation error

c++ - 如何在编译时对模板列表进行 "iterate"?

c++ - 使用 CDC 的 MFC 打印仅适用于某些打印机

c++ - _SECURE_SCL 通常在哪里找到?

c++ - 为什么 MFC CDocument 有 SetTitle 方法而不是 CFrameWnd

java - 如何使用从数据库检索的值创建 HashMap?

c++ - 解决由于类之间的循环依赖而导致的构建错误

c# enum equals() 与 ==