由于在头文件中使用了枚举,我得到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中定义
谢谢!
答案 0 :(得分:2)
问题与在标题中包含定义有关。这一行
PieceType board_data[NUM_ROWS][NUM_COLS];
在每个包含标题的翻译单元中定义一个新数组board_data
。要解决此问题,请将数组声明为外部,即
extern PieceType board_data[NUM_ROWS][NUM_COLS];
之后,在您的一个CPP文件中定义数组。
注意:此问题与enum
无关 - 您可能会遇到与其他任何类型相同的错误。