2016-12-31 11 views
0

헤더 파일에 enum을 사용했기 때문에 LNK 오류가 발생했습니다. 나는 그것이 무엇이 잘못되었는지 확신하지 못한다. enum은 일반적으로 헤더 파일에 포함됩니까?C++ LNK2005 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 

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에 관한 것이 아니며, 다른 유형과 동일한 오류가 발생합니다.