2016-12-31 91 views
0

由於在頭文件中使用枚舉,我得到了2005年的LNK錯誤。但我不確定它有什麼問題。枚舉通常包含在頭文件中?與enum相關的C++ LNK2005錯誤

這是我的代碼。我有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 「枚舉PieceType(* board_data)[6]」 (?board_data @@ 3PAY05W4PieceType @@ A)在board.obj已經定義

謝謝您!

回答

2

該問題與在頭文件中包含定義有關。這條線

PieceType board_data[NUM_ROWS][NUM_COLS]; 

限定從其中被包括在標題中的每個轉換單元的新數組board_data。要解決此問題,請將外部陣列聲明爲

extern PieceType board_data[NUM_ROWS][NUM_COLS]; 

然後,在您的一個CPP文件中定義數組。

注意:這個問題不是關於enum - 你會得到與任何其他類型相同的錯誤。